@fullstackdatasolutions/articles 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -1
- package/dist/index.cjs +169 -78
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.js +168 -78
- package/dist/index.js.map +1 -1
- package/package.json +14 -6
- package/src/ArticleCategoryGrid.tsx +1 -8
- package/src/ArticleDetailHero.tsx +96 -0
- package/src/__tests__/ArticleCategoryGrid.test.tsx +6 -0
- package/src/__tests__/ArticleDetailHero.test.tsx +102 -0
- package/src/index.ts +1 -0
package/dist/index.js
CHANGED
|
@@ -58,37 +58,26 @@ function ArticleCategoryGrid({ categories, pageSize = 8 }) {
|
|
|
58
58
|
/* @__PURE__ */ jsx("h2", { className: "text-3xl font-bold text-foreground mb-4", children: "Browse by Category" }),
|
|
59
59
|
/* @__PURE__ */ jsx("p", { className: "text-lg text-muted-foreground", children: "Explore our articles by topic to find the insights most relevant to your interests." })
|
|
60
60
|
] }),
|
|
61
|
-
/* @__PURE__ */ jsx(
|
|
62
|
-
"div",
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
/* @__PURE__ */ jsxs("div", { className: "p-4 text-center", children: [
|
|
82
|
-
/* @__PURE__ */ jsx("h3", { className: "font-semibold text-foreground text-base", children: cat.name }),
|
|
83
|
-
/* @__PURE__ */ jsxs("p", { className: "text-sm text-muted-foreground mt-1", children: [
|
|
84
|
-
cat.count,
|
|
85
|
-
" ",
|
|
86
|
-
cat.count === 1 ? "article" : "articles"
|
|
87
|
-
] })
|
|
88
|
-
] })
|
|
89
|
-
] }) }, cat.slug))
|
|
90
|
-
}
|
|
91
|
-
),
|
|
61
|
+
/* @__PURE__ */ jsx("div", { className: "grid md:grid-cols-2 lg:grid-cols-3 gap-6", children: visible.map((cat) => /* @__PURE__ */ jsx(Link, { href: `/articles/category/${cat.slug}`, children: /* @__PURE__ */ jsxs("div", { className: "group overflow-hidden rounded-xl border border-border shadow-sm hover:shadow-lg transition-all duration-300 cursor-pointer bg-card", children: [
|
|
62
|
+
/* @__PURE__ */ jsx("div", { className: "overflow-hidden", style: { position: "relative", height: "13rem" }, children: /* @__PURE__ */ jsx(
|
|
63
|
+
Image,
|
|
64
|
+
{
|
|
65
|
+
src: cat.featuredImage,
|
|
66
|
+
alt: cat.name,
|
|
67
|
+
fill: true,
|
|
68
|
+
sizes: "(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw",
|
|
69
|
+
className: "object-cover group-hover:scale-105 transition-transform duration-300"
|
|
70
|
+
}
|
|
71
|
+
) }),
|
|
72
|
+
/* @__PURE__ */ jsxs("div", { className: "p-4 text-center", children: [
|
|
73
|
+
/* @__PURE__ */ jsx("h3", { className: "font-semibold text-foreground text-base", children: cat.name }),
|
|
74
|
+
/* @__PURE__ */ jsxs("p", { className: "text-sm text-muted-foreground mt-1", children: [
|
|
75
|
+
cat.count,
|
|
76
|
+
" ",
|
|
77
|
+
cat.count === 1 ? "article" : "articles"
|
|
78
|
+
] })
|
|
79
|
+
] })
|
|
80
|
+
] }) }, cat.slug)) }),
|
|
92
81
|
hasMore && /* @__PURE__ */ jsx("div", { className: "mt-10 text-center", children: /* @__PURE__ */ jsx(
|
|
93
82
|
"button",
|
|
94
83
|
{
|
|
@@ -618,10 +607,110 @@ function ArticlesPage({ config }) {
|
|
|
618
607
|
] });
|
|
619
608
|
}
|
|
620
609
|
|
|
621
|
-
// src/
|
|
610
|
+
// src/ArticleDetailHero.tsx
|
|
622
611
|
import Image4 from "next/image";
|
|
623
612
|
import Link5 from "next/link";
|
|
613
|
+
import { Calendar as Calendar3, Clock as Clock3, User as User2 } from "lucide-react";
|
|
624
614
|
import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
615
|
+
function toSlug(cat) {
|
|
616
|
+
return cat.toLowerCase().replaceAll(/\s+/g, "-").replaceAll(/[^a-z0-9-]/g, "");
|
|
617
|
+
}
|
|
618
|
+
function ArticleDetailHero({ article, categoryBasePath }) {
|
|
619
|
+
return /* @__PURE__ */ jsxs9(
|
|
620
|
+
"section",
|
|
621
|
+
{
|
|
622
|
+
style: {
|
|
623
|
+
position: "relative",
|
|
624
|
+
height: "18rem",
|
|
625
|
+
display: "flex",
|
|
626
|
+
alignItems: "center",
|
|
627
|
+
justifyContent: "center",
|
|
628
|
+
overflow: "hidden"
|
|
629
|
+
},
|
|
630
|
+
children: [
|
|
631
|
+
/* @__PURE__ */ jsx10(
|
|
632
|
+
Image4,
|
|
633
|
+
{
|
|
634
|
+
src: article.featuredImage,
|
|
635
|
+
alt: article.title,
|
|
636
|
+
fill: true,
|
|
637
|
+
sizes: "100vw",
|
|
638
|
+
className: "object-cover",
|
|
639
|
+
priority: true
|
|
640
|
+
}
|
|
641
|
+
),
|
|
642
|
+
/* @__PURE__ */ jsx10(
|
|
643
|
+
"div",
|
|
644
|
+
{
|
|
645
|
+
style: {
|
|
646
|
+
position: "absolute",
|
|
647
|
+
inset: 0,
|
|
648
|
+
backgroundColor: "rgba(0,0,0,0.6)"
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
),
|
|
652
|
+
/* @__PURE__ */ jsxs9(
|
|
653
|
+
"div",
|
|
654
|
+
{
|
|
655
|
+
style: {
|
|
656
|
+
position: "relative",
|
|
657
|
+
zIndex: 10,
|
|
658
|
+
textAlign: "center",
|
|
659
|
+
color: "white",
|
|
660
|
+
padding: "0 1rem",
|
|
661
|
+
maxWidth: "56rem",
|
|
662
|
+
margin: "0 auto",
|
|
663
|
+
width: "100%"
|
|
664
|
+
},
|
|
665
|
+
children: [
|
|
666
|
+
article.categories && article.categories.length > 0 && /* @__PURE__ */ jsx10("div", { style: { display: "flex", flexWrap: "wrap", justifyContent: "center", gap: "0.5rem", marginBottom: "1rem" }, children: article.categories.slice(0, 4).map(
|
|
667
|
+
(cat) => categoryBasePath ? /* @__PURE__ */ jsx10(
|
|
668
|
+
Link5,
|
|
669
|
+
{
|
|
670
|
+
href: `${categoryBasePath}/${toSlug(cat)}`,
|
|
671
|
+
className: "inline-block bg-white/20 text-white text-sm font-medium px-3 py-1 rounded-full hover:bg-white/30 transition-colors",
|
|
672
|
+
children: cat
|
|
673
|
+
},
|
|
674
|
+
cat
|
|
675
|
+
) : /* @__PURE__ */ jsx10(
|
|
676
|
+
"span",
|
|
677
|
+
{
|
|
678
|
+
className: "inline-block bg-white/20 text-white text-sm font-medium px-3 py-1 rounded-full",
|
|
679
|
+
children: cat
|
|
680
|
+
},
|
|
681
|
+
cat
|
|
682
|
+
)
|
|
683
|
+
) }),
|
|
684
|
+
/* @__PURE__ */ jsx10("h1", { className: "text-4xl md:text-5xl font-bold mb-4", children: article.title }),
|
|
685
|
+
/* @__PURE__ */ jsxs9("div", { style: { display: "flex", alignItems: "center", justifyContent: "center", gap: "1.5rem", fontSize: "0.875rem", color: "rgba(255,255,255,0.8)" }, children: [
|
|
686
|
+
article.date && /* @__PURE__ */ jsxs9("div", { style: { display: "flex", alignItems: "center", gap: "0.5rem" }, children: [
|
|
687
|
+
/* @__PURE__ */ jsx10(Calendar3, { className: "h-4 w-4" }),
|
|
688
|
+
/* @__PURE__ */ jsx10("span", { children: article.date })
|
|
689
|
+
] }),
|
|
690
|
+
/* @__PURE__ */ jsxs9("div", { style: { display: "flex", alignItems: "center", gap: "0.5rem" }, children: [
|
|
691
|
+
/* @__PURE__ */ jsx10(Clock3, { className: "h-4 w-4" }),
|
|
692
|
+
/* @__PURE__ */ jsx10("span", { children: article.readTime })
|
|
693
|
+
] }),
|
|
694
|
+
/* @__PURE__ */ jsxs9("div", { style: { display: "flex", alignItems: "center", gap: "0.5rem" }, children: [
|
|
695
|
+
/* @__PURE__ */ jsx10(User2, { className: "h-4 w-4" }),
|
|
696
|
+
/* @__PURE__ */ jsxs9("span", { children: [
|
|
697
|
+
"By ",
|
|
698
|
+
article.author
|
|
699
|
+
] })
|
|
700
|
+
] })
|
|
701
|
+
] })
|
|
702
|
+
]
|
|
703
|
+
}
|
|
704
|
+
)
|
|
705
|
+
]
|
|
706
|
+
}
|
|
707
|
+
);
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
// src/CategoryArticlesPage.tsx
|
|
711
|
+
import Image5 from "next/image";
|
|
712
|
+
import Link6 from "next/link";
|
|
713
|
+
import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
625
714
|
function getCategoryDescription(config, slug, categoryName) {
|
|
626
715
|
var _a;
|
|
627
716
|
const raw = (_a = config.categoryDescriptions) == null ? void 0 : _a[slug];
|
|
@@ -637,8 +726,8 @@ function CategoryArticlesPage({ category, articles, config }) {
|
|
|
637
726
|
const description = getCategoryDescription(config, category, categoryName);
|
|
638
727
|
const pageSize = (_a = config.pageSize) != null ? _a : DEFAULT_PAGE_SIZE;
|
|
639
728
|
const siteUrl = config.siteUrl.replace(/\/$/, "");
|
|
640
|
-
return /* @__PURE__ */
|
|
641
|
-
/* @__PURE__ */
|
|
729
|
+
return /* @__PURE__ */ jsxs10("div", { children: [
|
|
730
|
+
/* @__PURE__ */ jsx11(
|
|
642
731
|
BreadcrumbSchema,
|
|
643
732
|
{
|
|
644
733
|
items: [
|
|
@@ -648,9 +737,9 @@ function CategoryArticlesPage({ category, articles, config }) {
|
|
|
648
737
|
]
|
|
649
738
|
}
|
|
650
739
|
),
|
|
651
|
-
/* @__PURE__ */
|
|
652
|
-
/* @__PURE__ */
|
|
653
|
-
|
|
740
|
+
/* @__PURE__ */ jsxs10("section", { className: "relative h-72 md:h-96 flex items-center justify-center overflow-hidden", children: [
|
|
741
|
+
/* @__PURE__ */ jsx11(
|
|
742
|
+
Image5,
|
|
654
743
|
{
|
|
655
744
|
src: heroImage,
|
|
656
745
|
alt: categoryName,
|
|
@@ -660,24 +749,24 @@ function CategoryArticlesPage({ category, articles, config }) {
|
|
|
660
749
|
priority: true
|
|
661
750
|
}
|
|
662
751
|
),
|
|
663
|
-
/* @__PURE__ */
|
|
664
|
-
/* @__PURE__ */
|
|
665
|
-
/* @__PURE__ */
|
|
666
|
-
/* @__PURE__ */
|
|
667
|
-
description.long && /* @__PURE__ */
|
|
668
|
-
/* @__PURE__ */
|
|
752
|
+
/* @__PURE__ */ jsx11("div", { className: "absolute inset-0 bg-black/60" }),
|
|
753
|
+
/* @__PURE__ */ jsxs10("div", { className: "relative z-10 text-center text-white px-4", children: [
|
|
754
|
+
/* @__PURE__ */ jsx11("p", { className: "text-sm font-semibold uppercase tracking-widest mb-3 opacity-80", children: "Category" }),
|
|
755
|
+
/* @__PURE__ */ jsx11("h1", { className: "text-4xl md:text-5xl font-bold mb-3", children: categoryName }),
|
|
756
|
+
description.long && /* @__PURE__ */ jsx11("p", { className: "text-lg opacity-90 max-w-2xl mx-auto mt-2", children: description.long }),
|
|
757
|
+
/* @__PURE__ */ jsxs10("p", { className: "text-lg opacity-70 mt-2", children: [
|
|
669
758
|
articles.length,
|
|
670
759
|
" article",
|
|
671
760
|
articles.length === 1 ? "" : "s"
|
|
672
761
|
] })
|
|
673
762
|
] })
|
|
674
763
|
] }),
|
|
675
|
-
/* @__PURE__ */
|
|
676
|
-
/* @__PURE__ */
|
|
677
|
-
/* @__PURE__ */
|
|
678
|
-
/* @__PURE__ */
|
|
764
|
+
/* @__PURE__ */ jsx11("section", { className: "py-16 bg-muted/50 flex-1", children: /* @__PURE__ */ jsxs10("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [
|
|
765
|
+
/* @__PURE__ */ jsxs10("div", { className: "mb-8 flex items-center justify-between", children: [
|
|
766
|
+
/* @__PURE__ */ jsx11(Link6, { href: "/articles", className: "text-sm text-primary hover:underline", children: "\u2190 All Articles" }),
|
|
767
|
+
/* @__PURE__ */ jsx11("p", { className: "text-sm text-muted-foreground", children: description.short })
|
|
679
768
|
] }),
|
|
680
|
-
/* @__PURE__ */
|
|
769
|
+
/* @__PURE__ */ jsx11(LatestArticles, { articles, pageSize })
|
|
681
770
|
] }) })
|
|
682
771
|
] });
|
|
683
772
|
}
|
|
@@ -688,7 +777,7 @@ import { useCallback as useCallback2, useEffect as useEffect4, useState as useSt
|
|
|
688
777
|
|
|
689
778
|
// src/CommentForm.tsx
|
|
690
779
|
import { useState as useState4 } from "react";
|
|
691
|
-
import { jsx as
|
|
780
|
+
import { jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
692
781
|
var MAX_LENGTH = 2e3;
|
|
693
782
|
var WARN_THRESHOLD = 1800;
|
|
694
783
|
function submitLabel(submitting, parentId) {
|
|
@@ -727,8 +816,8 @@ function CommentForm({ articleSlug, parentId, onSuccess, onCancel }) {
|
|
|
727
816
|
}
|
|
728
817
|
});
|
|
729
818
|
}
|
|
730
|
-
return /* @__PURE__ */
|
|
731
|
-
/* @__PURE__ */
|
|
819
|
+
return /* @__PURE__ */ jsxs11("form", { onSubmit: handleSubmit, className: "space-y-2", children: [
|
|
820
|
+
/* @__PURE__ */ jsx12(
|
|
732
821
|
"textarea",
|
|
733
822
|
{
|
|
734
823
|
value: body,
|
|
@@ -741,13 +830,13 @@ function CommentForm({ articleSlug, parentId, onSuccess, onCancel }) {
|
|
|
741
830
|
"aria-label": parentId ? "Reply text" : "Comment text"
|
|
742
831
|
}
|
|
743
832
|
),
|
|
744
|
-
remaining <= MAX_LENGTH - WARN_THRESHOLD && /* @__PURE__ */
|
|
833
|
+
remaining <= MAX_LENGTH - WARN_THRESHOLD && /* @__PURE__ */ jsxs11("p", { className: `text-xs ${remaining < 0 ? "text-destructive" : "text-muted-foreground"}`, children: [
|
|
745
834
|
remaining,
|
|
746
835
|
" characters remaining"
|
|
747
836
|
] }),
|
|
748
|
-
error && /* @__PURE__ */
|
|
749
|
-
/* @__PURE__ */
|
|
750
|
-
/* @__PURE__ */
|
|
837
|
+
error && /* @__PURE__ */ jsx12("p", { className: "text-xs text-destructive", children: error }),
|
|
838
|
+
/* @__PURE__ */ jsxs11("div", { className: "flex gap-2", children: [
|
|
839
|
+
/* @__PURE__ */ jsx12(
|
|
751
840
|
"button",
|
|
752
841
|
{
|
|
753
842
|
type: "submit",
|
|
@@ -756,7 +845,7 @@ function CommentForm({ articleSlug, parentId, onSuccess, onCancel }) {
|
|
|
756
845
|
children: submitLabel(submitting, parentId)
|
|
757
846
|
}
|
|
758
847
|
),
|
|
759
|
-
onCancel && /* @__PURE__ */
|
|
848
|
+
onCancel && /* @__PURE__ */ jsx12(
|
|
760
849
|
"button",
|
|
761
850
|
{
|
|
762
851
|
type: "button",
|
|
@@ -771,7 +860,7 @@ function CommentForm({ articleSlug, parentId, onSuccess, onCancel }) {
|
|
|
771
860
|
|
|
772
861
|
// src/CommentItem.tsx
|
|
773
862
|
import { useState as useState5 } from "react";
|
|
774
|
-
import { Fragment, jsx as
|
|
863
|
+
import { Fragment, jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
775
864
|
function relativeTime(iso) {
|
|
776
865
|
const diff = Date.now() - new Date(iso).getTime();
|
|
777
866
|
const minutes = Math.floor(diff / 6e4);
|
|
@@ -809,15 +898,15 @@ function CommentItem({
|
|
|
809
898
|
}
|
|
810
899
|
});
|
|
811
900
|
}
|
|
812
|
-
return /* @__PURE__ */
|
|
813
|
-
/* @__PURE__ */
|
|
814
|
-
/* @__PURE__ */
|
|
815
|
-
/* @__PURE__ */
|
|
816
|
-
/* @__PURE__ */
|
|
901
|
+
return /* @__PURE__ */ jsxs12("div", { className: `${isReply ? "ml-8 border-l-2 border-border pl-4" : ""}`, children: [
|
|
902
|
+
/* @__PURE__ */ jsx13("div", { className: "rounded-lg bg-muted/40 p-3 space-y-1", children: comment.isDeleted ? /* @__PURE__ */ jsx13("p", { className: "text-sm italic text-muted-foreground", children: "Comment removed" }) : /* @__PURE__ */ jsxs12(Fragment, { children: [
|
|
903
|
+
/* @__PURE__ */ jsxs12("div", { className: "flex items-center justify-between gap-2", children: [
|
|
904
|
+
/* @__PURE__ */ jsx13("span", { className: "text-sm font-medium text-foreground", children: comment.authorName }),
|
|
905
|
+
/* @__PURE__ */ jsx13("span", { className: "text-xs text-muted-foreground", children: relativeTime(comment.createdAt) })
|
|
817
906
|
] }),
|
|
818
|
-
/* @__PURE__ */
|
|
819
|
-
/* @__PURE__ */
|
|
820
|
-
canReply && /* @__PURE__ */
|
|
907
|
+
/* @__PURE__ */ jsx13("p", { className: "text-sm text-foreground whitespace-pre-wrap break-words", children: comment.body }),
|
|
908
|
+
/* @__PURE__ */ jsxs12("div", { className: "flex gap-3 pt-1", children: [
|
|
909
|
+
canReply && /* @__PURE__ */ jsx13(
|
|
821
910
|
"button",
|
|
822
911
|
{
|
|
823
912
|
onClick: () => setShowReplyForm((v) => !v),
|
|
@@ -825,7 +914,7 @@ function CommentItem({
|
|
|
825
914
|
children: showReplyForm ? "Cancel" : "Reply"
|
|
826
915
|
}
|
|
827
916
|
),
|
|
828
|
-
canDelete && /* @__PURE__ */
|
|
917
|
+
canDelete && /* @__PURE__ */ jsx13(
|
|
829
918
|
"button",
|
|
830
919
|
{
|
|
831
920
|
onClick: handleDelete,
|
|
@@ -836,7 +925,7 @@ function CommentItem({
|
|
|
836
925
|
)
|
|
837
926
|
] })
|
|
838
927
|
] }) }),
|
|
839
|
-
showReplyForm && /* @__PURE__ */
|
|
928
|
+
showReplyForm && /* @__PURE__ */ jsx13("div", { className: "mt-2 ml-2", children: /* @__PURE__ */ jsx13(
|
|
840
929
|
CommentForm,
|
|
841
930
|
{
|
|
842
931
|
articleSlug,
|
|
@@ -848,7 +937,7 @@ function CommentItem({
|
|
|
848
937
|
onCancel: () => setShowReplyForm(false)
|
|
849
938
|
}
|
|
850
939
|
) }),
|
|
851
|
-
replies.length > 0 && /* @__PURE__ */
|
|
940
|
+
replies.length > 0 && /* @__PURE__ */ jsx13("div", { className: "mt-2 space-y-2", children: replies.map((reply) => /* @__PURE__ */ jsx13(
|
|
852
941
|
CommentItem,
|
|
853
942
|
{
|
|
854
943
|
comment: __spreadProps(__spreadValues({}, reply), { replies: [] }),
|
|
@@ -863,7 +952,7 @@ function CommentItem({
|
|
|
863
952
|
}
|
|
864
953
|
|
|
865
954
|
// src/CommentThread.tsx
|
|
866
|
-
import { jsx as
|
|
955
|
+
import { jsx as jsx14 } from "react/jsx-runtime";
|
|
867
956
|
function CommentThread({
|
|
868
957
|
comments,
|
|
869
958
|
articleSlug,
|
|
@@ -871,9 +960,9 @@ function CommentThread({
|
|
|
871
960
|
onRefresh
|
|
872
961
|
}) {
|
|
873
962
|
if (comments.length === 0) {
|
|
874
|
-
return /* @__PURE__ */
|
|
963
|
+
return /* @__PURE__ */ jsx14("p", { className: "text-sm text-muted-foreground text-center py-6", children: "No comments yet. Be the first to share your thoughts." });
|
|
875
964
|
}
|
|
876
|
-
return /* @__PURE__ */
|
|
965
|
+
return /* @__PURE__ */ jsx14("div", { className: "space-y-4", children: comments.map((comment) => /* @__PURE__ */ jsx14(
|
|
877
966
|
CommentItem,
|
|
878
967
|
{
|
|
879
968
|
comment,
|
|
@@ -886,7 +975,7 @@ function CommentThread({
|
|
|
886
975
|
}
|
|
887
976
|
|
|
888
977
|
// src/CommentsSection.tsx
|
|
889
|
-
import { jsx as
|
|
978
|
+
import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
890
979
|
function CommentsSection({ articleSlug, config }) {
|
|
891
980
|
var _a, _b, _c, _d, _e, _f;
|
|
892
981
|
const { data: session, status } = useSession();
|
|
@@ -918,10 +1007,10 @@ function CommentsSection({ articleSlug, config }) {
|
|
|
918
1007
|
if (!enabled) return null;
|
|
919
1008
|
const count = comments.length;
|
|
920
1009
|
const label = count === 1 ? "1 comment" : `${count} comments`;
|
|
921
|
-
return /* @__PURE__ */
|
|
922
|
-
/* @__PURE__ */
|
|
923
|
-
status === "authenticated" ? /* @__PURE__ */
|
|
924
|
-
/* @__PURE__ */
|
|
1010
|
+
return /* @__PURE__ */ jsxs13("section", { "aria-label": "Comments", className: "mt-12 pt-8 border-t border-border space-y-6", children: [
|
|
1011
|
+
/* @__PURE__ */ jsx15("h2", { className: "text-xl font-semibold text-foreground", children: loading ? "Comments" : label }),
|
|
1012
|
+
status === "authenticated" ? /* @__PURE__ */ jsx15(CommentForm, { articleSlug, onSuccess: fetchComments }) : /* @__PURE__ */ jsxs13("p", { className: "text-sm text-muted-foreground", children: [
|
|
1013
|
+
/* @__PURE__ */ jsx15(
|
|
925
1014
|
"button",
|
|
926
1015
|
{
|
|
927
1016
|
onClick: () => signIn(),
|
|
@@ -932,8 +1021,8 @@ function CommentsSection({ articleSlug, config }) {
|
|
|
932
1021
|
" ",
|
|
933
1022
|
"to join the discussion."
|
|
934
1023
|
] }),
|
|
935
|
-
fetchError && /* @__PURE__ */
|
|
936
|
-
loading ? /* @__PURE__ */
|
|
1024
|
+
fetchError && /* @__PURE__ */ jsx15("p", { className: "text-sm text-destructive", children: fetchError }),
|
|
1025
|
+
loading ? /* @__PURE__ */ jsx15("p", { className: "text-sm text-muted-foreground", children: "Loading comments\u2026" }) : /* @__PURE__ */ jsx15(
|
|
937
1026
|
CommentThread,
|
|
938
1027
|
{
|
|
939
1028
|
comments,
|
|
@@ -947,6 +1036,7 @@ function CommentsSection({ articleSlug, config }) {
|
|
|
947
1036
|
export {
|
|
948
1037
|
ArticleCard,
|
|
949
1038
|
ArticleCategoryGrid,
|
|
1039
|
+
ArticleDetailHero,
|
|
950
1040
|
ArticleSchema,
|
|
951
1041
|
ArticleSearchBar,
|
|
952
1042
|
ArticlesHero,
|