@burdenoff/microfe-comradecircle 2026.819.1 → 2026.830.1
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/dist/comradecircle/components/AvatarUploadField.js +8 -8
- package/dist/comradecircle/components/CircleCard.js +4 -4
- package/dist/comradecircle/components/CommentThread.d.ts.map +1 -1
- package/dist/comradecircle/components/CommentThread.js +66 -61
- package/dist/comradecircle/components/CommentThread.js.map +1 -1
- package/dist/comradecircle/components/CreateCircleDialog.d.ts.map +1 -1
- package/dist/comradecircle/components/CreateCircleDialog.js +89 -88
- package/dist/comradecircle/components/CreateCircleDialog.js.map +1 -1
- package/dist/comradecircle/components/CreateEventDialog.d.ts.map +1 -1
- package/dist/comradecircle/components/CreateEventDialog.js +28 -27
- package/dist/comradecircle/components/CreateEventDialog.js.map +1 -1
- package/dist/comradecircle/components/DraftsPanel.d.ts +32 -0
- package/dist/comradecircle/components/DraftsPanel.d.ts.map +1 -0
- package/dist/comradecircle/components/DraftsPanel.js +176 -0
- package/dist/comradecircle/components/DraftsPanel.js.map +1 -0
- package/dist/comradecircle/components/EventCard.js +5 -5
- package/dist/comradecircle/components/FileImage.js +5 -5
- package/dist/comradecircle/components/ImageAttachments.js +21 -21
- package/dist/comradecircle/components/MemberIdentity.js +4 -4
- package/dist/comradecircle/components/MobileBottomNav.d.ts.map +1 -1
- package/dist/comradecircle/components/MobileBottomNav.js +37 -30
- package/dist/comradecircle/components/MobileBottomNav.js.map +1 -1
- package/dist/comradecircle/components/Pagination.d.ts.map +1 -1
- package/dist/comradecircle/components/Pagination.js +37 -28
- package/dist/comradecircle/components/Pagination.js.map +1 -1
- package/dist/comradecircle/components/PollCard.js +13 -13
- package/dist/comradecircle/components/PostCard.d.ts.map +1 -1
- package/dist/comradecircle/components/PostCard.js +102 -89
- package/dist/comradecircle/components/PostCard.js.map +1 -1
- package/dist/comradecircle/components/PostComposer.d.ts +11 -5
- package/dist/comradecircle/components/PostComposer.d.ts.map +1 -1
- package/dist/comradecircle/components/PostComposer.js +60 -48
- package/dist/comradecircle/components/PostComposer.js.map +1 -1
- package/dist/comradecircle/components/ReactionBar.d.ts.map +1 -1
- package/dist/comradecircle/components/ReactionBar.js +65 -55
- package/dist/comradecircle/components/ReactionBar.js.map +1 -1
- package/dist/comradecircle/components/StateViews.d.ts.map +1 -1
- package/dist/comradecircle/components/StateViews.js +38 -30
- package/dist/comradecircle/components/StateViews.js.map +1 -1
- package/dist/comradecircle/components/UpcomingEvents.d.ts +26 -0
- package/dist/comradecircle/components/UpcomingEvents.d.ts.map +1 -0
- package/dist/comradecircle/components/UpcomingEvents.js +126 -0
- package/dist/comradecircle/components/UpcomingEvents.js.map +1 -0
- package/dist/comradecircle/components/index.d.ts +2 -0
- package/dist/comradecircle/components/index.d.ts.map +1 -1
- package/dist/comradecircle/hooks/index.d.ts +1 -0
- package/dist/comradecircle/hooks/index.d.ts.map +1 -1
- package/dist/comradecircle/hooks/index.js +1 -0
- package/dist/comradecircle/hooks/useTr.d.ts +18 -0
- package/dist/comradecircle/hooks/useTr.d.ts.map +1 -0
- package/dist/comradecircle/hooks/useTr.js +12 -0
- package/dist/comradecircle/hooks/useTr.js.map +1 -0
- package/dist/comradecircle/pages/FeedPage.d.ts +5 -0
- package/dist/comradecircle/pages/FeedPage.d.ts.map +1 -1
- package/dist/comradecircle/pages/FeedPage.js +76 -62
- package/dist/comradecircle/pages/FeedPage.js.map +1 -1
- package/dist/comradecircle/pages/circles/CircleDetailPage.d.ts.map +1 -1
- package/dist/comradecircle/pages/circles/CircleDetailPage.js +454 -409
- package/dist/comradecircle/pages/circles/CircleDetailPage.js.map +1 -1
- package/dist/comradecircle/pages/circles/CirclesPage.d.ts.map +1 -1
- package/dist/comradecircle/pages/circles/CirclesPage.js +124 -117
- package/dist/comradecircle/pages/circles/CirclesPage.js.map +1 -1
- package/dist/comradecircle/pages/events/EventDetailPage.d.ts.map +1 -1
- package/dist/comradecircle/pages/events/EventDetailPage.js +182 -153
- package/dist/comradecircle/pages/events/EventDetailPage.js.map +1 -1
- package/dist/comradecircle/pages/events/EventsPage.d.ts.map +1 -1
- package/dist/comradecircle/pages/events/EventsPage.js +100 -91
- package/dist/comradecircle/pages/events/EventsPage.js.map +1 -1
- package/dist/comradecircle/pages/members/MemberProfilePage.d.ts.map +1 -1
- package/dist/comradecircle/pages/members/MemberProfilePage.js +172 -159
- package/dist/comradecircle/pages/members/MemberProfilePage.js.map +1 -1
- package/dist/comradecircle/pages/members/MembersPage.d.ts.map +1 -1
- package/dist/comradecircle/pages/members/MembersPage.js +103 -104
- package/dist/comradecircle/pages/members/MembersPage.js.map +1 -1
- package/dist/comradecircle/pages/monetization/MonetizationPage.d.ts.map +1 -1
- package/dist/comradecircle/pages/monetization/MonetizationPage.js +319 -297
- package/dist/comradecircle/pages/monetization/MonetizationPage.js.map +1 -1
- package/dist/comradecircle/pages/posts/PostThreadPage.d.ts.map +1 -1
- package/dist/comradecircle/pages/posts/PostThreadPage.js +37 -32
- package/dist/comradecircle/pages/posts/PostThreadPage.js.map +1 -1
- package/dist/comradecircle/pages/profile/MyProfilePage.d.ts.map +1 -1
- package/dist/comradecircle/pages/profile/MyProfilePage.js +182 -177
- package/dist/comradecircle/pages/profile/MyProfilePage.js.map +1 -1
- package/dist/comradecircle/utils/i18n.js +15 -0
- package/dist/comradecircle/utils/i18n.js.map +1 -0
- package/dist/comradecircle/utils/pageContext.d.ts.map +1 -1
- package/dist/comradecircle/utils/pageContext.js +3 -1
- package/dist/comradecircle/utils/pageContext.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import { useComradeCircle as e } from "../context/ComradeCircleContext.js";
|
|
2
2
|
import "../context/index.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { useComMyFeed as t } from "../hooks/useComradeCircleApi.js";
|
|
4
|
+
import { useCursorPager as n } from "../hooks/useCursorPager.js";
|
|
5
|
+
import { useTr as r } from "../hooks/useTr.js";
|
|
6
6
|
import "../hooks/index.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
7
|
+
import { PageLayout as i } from "../components/PageLayout.js";
|
|
8
|
+
import { PostCard as a } from "../components/PostCard.js";
|
|
9
|
+
import { UpcomingEvents as o } from "../components/UpcomingEvents.js";
|
|
10
|
+
import { EmptyState as s } from "../components/EmptyState.js";
|
|
11
|
+
import { ErrorView as c } from "../components/StateViews.js";
|
|
12
|
+
import { Pagination as l } from "../components/Pagination.js";
|
|
13
|
+
import { Compass as u, Newspaper as d, UsersRound as f } from "lucide-react";
|
|
14
|
+
import { jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
15
|
+
import { Button as h, GlassCard as g, Skeleton as _ } from "@burdenoff/fe-libs/ui";
|
|
14
16
|
//#region src/comradecircle/pages/FeedPage.tsx
|
|
15
|
-
var
|
|
17
|
+
var v = 20, y = "motion-safe:animate-in motion-safe:fade-in motion-safe:slide-in-from-bottom-3 motion-safe:duration-500 motion-safe:ease-out motion-safe:fill-mode-both", b = [
|
|
16
18
|
["w-11/12", "w-3/4"],
|
|
17
19
|
[
|
|
18
20
|
"w-full",
|
|
@@ -21,91 +23,103 @@ var g = 20, _ = "motion-safe:animate-in motion-safe:fade-in motion-safe:slide-in
|
|
|
21
23
|
],
|
|
22
24
|
["w-5/6", "w-1/2"]
|
|
23
25
|
];
|
|
24
|
-
function
|
|
25
|
-
return /* @__PURE__ */
|
|
26
|
+
function x() {
|
|
27
|
+
return /* @__PURE__ */ p("div", {
|
|
26
28
|
className: "mx-auto flex max-w-2xl flex-col gap-4",
|
|
27
29
|
"aria-hidden": "true",
|
|
28
|
-
children:
|
|
30
|
+
children: b.map((e, t) => /* @__PURE__ */ m(g, {
|
|
29
31
|
treatment: "plain",
|
|
30
32
|
className: "p-4",
|
|
31
33
|
children: [
|
|
32
|
-
/* @__PURE__ */
|
|
34
|
+
/* @__PURE__ */ m("div", {
|
|
33
35
|
className: "flex items-start gap-3",
|
|
34
|
-
children: [/* @__PURE__ */
|
|
36
|
+
children: [/* @__PURE__ */ p(_, { className: "h-10 w-10 shrink-0 rounded-full" }), /* @__PURE__ */ m("div", {
|
|
35
37
|
className: "flex-1 space-y-2 pt-1",
|
|
36
|
-
children: [/* @__PURE__ */
|
|
38
|
+
children: [/* @__PURE__ */ p(_, { className: "h-3.5 w-32" }), /* @__PURE__ */ p(_, { className: "h-3 w-20" })]
|
|
37
39
|
})]
|
|
38
40
|
}),
|
|
39
|
-
/* @__PURE__ */
|
|
41
|
+
/* @__PURE__ */ p("div", {
|
|
40
42
|
className: "mt-4 space-y-2.5",
|
|
41
|
-
children: e.map((e, t) => /* @__PURE__ */
|
|
43
|
+
children: e.map((e, t) => /* @__PURE__ */ p(_, { className: `h-3 ${e}` }, t))
|
|
42
44
|
}),
|
|
43
|
-
/* @__PURE__ */
|
|
45
|
+
/* @__PURE__ */ m("div", {
|
|
44
46
|
className: "mt-4 flex items-center justify-between gap-3 border-t border-border-seam pt-3",
|
|
45
|
-
children: [/* @__PURE__ */
|
|
47
|
+
children: [/* @__PURE__ */ m("div", {
|
|
46
48
|
className: "flex items-center gap-2",
|
|
47
49
|
children: [
|
|
48
|
-
/* @__PURE__ */
|
|
49
|
-
/* @__PURE__ */
|
|
50
|
-
/* @__PURE__ */
|
|
50
|
+
/* @__PURE__ */ p(_, { className: "h-7 w-14 rounded-full" }),
|
|
51
|
+
/* @__PURE__ */ p(_, { className: "h-7 w-14 rounded-full" }),
|
|
52
|
+
/* @__PURE__ */ p(_, { className: "h-7 w-14 rounded-full" })
|
|
51
53
|
]
|
|
52
|
-
}), /* @__PURE__ */
|
|
54
|
+
}), /* @__PURE__ */ p(_, { className: "h-7 w-24 rounded-full" })]
|
|
53
55
|
})
|
|
54
56
|
]
|
|
55
57
|
}, t))
|
|
56
58
|
});
|
|
57
59
|
}
|
|
58
|
-
function
|
|
59
|
-
let { navigateTo:
|
|
60
|
-
limit:
|
|
61
|
-
cursor:
|
|
62
|
-
}),
|
|
63
|
-
return /* @__PURE__ */
|
|
64
|
-
title: "Home",
|
|
60
|
+
function S() {
|
|
61
|
+
let { navigateTo: g } = e(), _ = n(), b = r(), { data: S, isLoading: C, isError: w, refetch: T } = t({
|
|
62
|
+
limit: v,
|
|
63
|
+
cursor: _.cursor
|
|
64
|
+
}), E = S?.items ?? [];
|
|
65
|
+
return /* @__PURE__ */ m(i, {
|
|
66
|
+
title: b("comradecircle.pages.feed.title", "Home"),
|
|
65
67
|
titleGradient: !0,
|
|
66
68
|
aurora: !0,
|
|
67
|
-
description: "Posts from the circles, channels, and members you follow — newest first.",
|
|
68
|
-
actions: /* @__PURE__ */
|
|
69
|
+
description: b("comradecircle.pages.feed.description", "Posts from the circles, channels, and members you follow — newest first."),
|
|
70
|
+
actions: /* @__PURE__ */ m(h, {
|
|
69
71
|
variant: "outline",
|
|
70
|
-
onClick: () =>
|
|
71
|
-
children: [
|
|
72
|
+
onClick: () => g("circles"),
|
|
73
|
+
children: [
|
|
74
|
+
/* @__PURE__ */ p(u, { className: "mr-1.5 h-4 w-4" }),
|
|
75
|
+
" ",
|
|
76
|
+
b("comradecircle.pages.feed.discoverCircles", "Discover circles")
|
|
77
|
+
]
|
|
72
78
|
}),
|
|
73
|
-
children:
|
|
74
|
-
message: "We couldn't load your feed.",
|
|
75
|
-
onRetry: () =>
|
|
76
|
-
}) :
|
|
79
|
+
children: [/* @__PURE__ */ p(o, { className: "mb-5" }), C ? /* @__PURE__ */ p(x, {}) : w ? /* @__PURE__ */ p(c, {
|
|
80
|
+
message: b("comradecircle.pages.feed.errorMessage", "We couldn't load your feed."),
|
|
81
|
+
onRetry: () => T()
|
|
82
|
+
}) : E.length === 0 && _.page === 0 ? /* @__PURE__ */ p(s, {
|
|
77
83
|
illustration: "empty-notifications",
|
|
78
|
-
icon: /* @__PURE__ */ d
|
|
79
|
-
title: "Your feed is quiet",
|
|
80
|
-
description: "Follow circles and members to fill your home feed with their latest posts, events, and discussions.",
|
|
81
|
-
action: /* @__PURE__ */
|
|
84
|
+
icon: /* @__PURE__ */ p(d, { className: "h-10 w-10" }),
|
|
85
|
+
title: b("comradecircle.pages.feed.emptyTitle", "Your feed is quiet"),
|
|
86
|
+
description: b("comradecircle.pages.feed.emptyDescription", "Follow circles and members to fill your home feed with their latest posts, events, and discussions."),
|
|
87
|
+
action: /* @__PURE__ */ m("div", {
|
|
82
88
|
className: "flex flex-wrap items-center justify-center gap-3",
|
|
83
|
-
children: [/* @__PURE__ */
|
|
84
|
-
onClick: () =>
|
|
85
|
-
children: [
|
|
86
|
-
|
|
89
|
+
children: [/* @__PURE__ */ m(h, {
|
|
90
|
+
onClick: () => g("circles"),
|
|
91
|
+
children: [
|
|
92
|
+
/* @__PURE__ */ p(u, { className: "mr-1.5 h-4 w-4" }),
|
|
93
|
+
" ",
|
|
94
|
+
b("comradecircle.pages.feed.exploreCircles", "Explore circles")
|
|
95
|
+
]
|
|
96
|
+
}), /* @__PURE__ */ m(h, {
|
|
87
97
|
variant: "outline",
|
|
88
|
-
onClick: () =>
|
|
89
|
-
children: [
|
|
98
|
+
onClick: () => g("members"),
|
|
99
|
+
children: [
|
|
100
|
+
/* @__PURE__ */ p(f, { className: "mr-1.5 h-4 w-4" }),
|
|
101
|
+
" ",
|
|
102
|
+
b("comradecircle.pages.feed.findMembers", "Find members")
|
|
103
|
+
]
|
|
90
104
|
})]
|
|
91
105
|
})
|
|
92
|
-
}) : /* @__PURE__ */
|
|
106
|
+
}) : /* @__PURE__ */ m("div", {
|
|
93
107
|
className: "mx-auto flex max-w-2xl flex-col gap-4",
|
|
94
|
-
children: [
|
|
95
|
-
className:
|
|
108
|
+
children: [E.map((e, t) => /* @__PURE__ */ p("div", {
|
|
109
|
+
className: y,
|
|
96
110
|
style: { animationDelay: `${Math.min(t, 8) * 70}ms` },
|
|
97
|
-
children: /* @__PURE__ */
|
|
98
|
-
}, e.id)), /* @__PURE__ */
|
|
99
|
-
page:
|
|
100
|
-
pageSize:
|
|
101
|
-
itemCount:
|
|
102
|
-
hasMore:
|
|
103
|
-
onPageChange: (e) =>
|
|
111
|
+
children: /* @__PURE__ */ p(a, { post: e })
|
|
112
|
+
}, e.id)), /* @__PURE__ */ p(l, {
|
|
113
|
+
page: _.page,
|
|
114
|
+
pageSize: v,
|
|
115
|
+
itemCount: E.length,
|
|
116
|
+
hasMore: S?.pageInfo.hasMore ?? !1,
|
|
117
|
+
onPageChange: (e) => _.onPageChange(e, S?.pageInfo.cursor)
|
|
104
118
|
})]
|
|
105
|
-
})
|
|
119
|
+
})]
|
|
106
120
|
});
|
|
107
121
|
}
|
|
108
122
|
//#endregion
|
|
109
|
-
export {
|
|
123
|
+
export { S as FeedPage };
|
|
110
124
|
|
|
111
125
|
//# sourceMappingURL=FeedPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedPage.js","names":[],"sources":["../../../src/comradecircle/pages/FeedPage.tsx"],"sourcesContent":["/**\n * FeedPage — the member's unified home feed.\n * @module comradecircle/pages\n *\n * Reads `comMyFeed` (published posts from every channel, member, and circle the\n * caller follows, newest first). A new member with no follows sees a guided\n * empty state pointing at circle & member discovery.\n */\n\nimport { Newspaper, Compass, UsersRound } from 'lucide-react';\nimport { Button, GlassCard, Skeleton } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../components/PageLayout';\nimport { PostCard } from '../components/PostCard';\nimport { EmptyState } from '../components/EmptyState';\nimport { ErrorView } from '../components/StateViews';\nimport { Pagination } from '../components/Pagination';\nimport { useComMyFeed, useCursorPager } from '../hooks';\nimport { useComradeCircle } from '../context';\n\nconst PAGE_SIZE = 20;\n\n/**\n * Motion for each post as the feed 'assembles' on arrival. Fully neutralised\n * under `prefers-reduced-motion` (every class is `motion-safe:`); `fill-mode-both`\n * holds the hidden start state through the per-card `animationDelay`.\n */\nconst POST_ENTER =\n 'motion-safe:animate-in motion-safe:fade-in motion-safe:slide-in-from-bottom-3 ' +\n 'motion-safe:duration-500 motion-safe:ease-out motion-safe:fill-mode-both';\n\n/** Widths that give each skeleton post a natural, non-uniform body. */\nconst SKELETON_LINES = [\n ['w-11/12', 'w-3/4'],\n ['w-full', 'w-10/12', 'w-2/3'],\n ['w-5/6', 'w-1/2'],\n] as const;\n\n/**\n * A stack of post-card-shaped skeletons that mirrors the final feed layout, so\n * the transition from loading → loaded doesn't shift the column.\n */\nfunction FeedSkeleton() {\n return (\n <div className=\"mx-auto flex max-w-2xl flex-col gap-4\" aria-hidden=\"true\">\n {SKELETON_LINES.map((lines, i) => (\n <GlassCard key={i} treatment=\"plain\" className=\"p-4\">\n <div className=\"flex items-start gap-3\">\n <Skeleton className=\"h-10 w-10 shrink-0 rounded-full\" />\n <div className=\"flex-1 space-y-2 pt-1\">\n <Skeleton className=\"h-3.5 w-32\" />\n <Skeleton className=\"h-3 w-20\" />\n </div>\n </div>\n <div className=\"mt-4 space-y-2.5\">\n {lines.map((w, j) => (\n <Skeleton key={j} className={`h-3 ${w}`} />\n ))}\n </div>\n <div className=\"mt-4 flex items-center justify-between gap-3 border-t border-border-seam pt-3\">\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"h-7 w-14 rounded-full\" />\n <Skeleton className=\"h-7 w-14 rounded-full\" />\n <Skeleton className=\"h-7 w-14 rounded-full\" />\n </div>\n <Skeleton className=\"h-7 w-24 rounded-full\" />\n </div>\n </GlassCard>\n ))}\n </div>\n );\n}\n\nexport function FeedPage() {\n const { navigateTo } = useComradeCircle();\n const pager = useCursorPager();\n const { data, isLoading, isError, refetch } = useComMyFeed({\n limit: PAGE_SIZE,\n cursor: pager.cursor,\n });\n\n const posts = data?.items ?? [];\n\n return (\n <PageLayout\n title
|
|
1
|
+
{"version":3,"file":"FeedPage.js","names":[],"sources":["../../../src/comradecircle/pages/FeedPage.tsx"],"sourcesContent":["/**\n * FeedPage — the member's unified home feed.\n * @module comradecircle/pages\n *\n * Reads `comMyFeed` (published posts from every channel, member, and circle the\n * caller follows, newest first). A new member with no follows sees a guided\n * empty state pointing at circle & member discovery.\n *\n * Above the post column sits {@link UpcomingEvents} — the mobile home mock\n * shows the home surface carrying the member's next gathering (with an RSVP\n * affordance), not posts alone. It is a separate `comListEvents` read because\n * `comMyFeed` returns `ComPost` rows only.\n */\n\nimport { Newspaper, Compass, UsersRound } from 'lucide-react';\nimport { Button, GlassCard, Skeleton } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../components/PageLayout';\nimport { PostCard } from '../components/PostCard';\nimport { UpcomingEvents } from '../components/UpcomingEvents';\nimport { EmptyState } from '../components/EmptyState';\nimport { ErrorView } from '../components/StateViews';\nimport { Pagination } from '../components/Pagination';\nimport { useComMyFeed, useCursorPager, useTr } from '../hooks';\nimport { useComradeCircle } from '../context';\n\nconst PAGE_SIZE = 20;\n\n/**\n * Motion for each post as the feed 'assembles' on arrival. Fully neutralised\n * under `prefers-reduced-motion` (every class is `motion-safe:`); `fill-mode-both`\n * holds the hidden start state through the per-card `animationDelay`.\n */\nconst POST_ENTER =\n 'motion-safe:animate-in motion-safe:fade-in motion-safe:slide-in-from-bottom-3 ' +\n 'motion-safe:duration-500 motion-safe:ease-out motion-safe:fill-mode-both';\n\n/** Widths that give each skeleton post a natural, non-uniform body. */\nconst SKELETON_LINES = [\n ['w-11/12', 'w-3/4'],\n ['w-full', 'w-10/12', 'w-2/3'],\n ['w-5/6', 'w-1/2'],\n] as const;\n\n/**\n * A stack of post-card-shaped skeletons that mirrors the final feed layout, so\n * the transition from loading → loaded doesn't shift the column.\n */\nfunction FeedSkeleton() {\n return (\n <div className=\"mx-auto flex max-w-2xl flex-col gap-4\" aria-hidden=\"true\">\n {SKELETON_LINES.map((lines, i) => (\n <GlassCard key={i} treatment=\"plain\" className=\"p-4\">\n <div className=\"flex items-start gap-3\">\n <Skeleton className=\"h-10 w-10 shrink-0 rounded-full\" />\n <div className=\"flex-1 space-y-2 pt-1\">\n <Skeleton className=\"h-3.5 w-32\" />\n <Skeleton className=\"h-3 w-20\" />\n </div>\n </div>\n <div className=\"mt-4 space-y-2.5\">\n {lines.map((w, j) => (\n <Skeleton key={j} className={`h-3 ${w}`} />\n ))}\n </div>\n <div className=\"mt-4 flex items-center justify-between gap-3 border-t border-border-seam pt-3\">\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"h-7 w-14 rounded-full\" />\n <Skeleton className=\"h-7 w-14 rounded-full\" />\n <Skeleton className=\"h-7 w-14 rounded-full\" />\n </div>\n <Skeleton className=\"h-7 w-24 rounded-full\" />\n </div>\n </GlassCard>\n ))}\n </div>\n );\n}\n\nexport function FeedPage() {\n const { navigateTo } = useComradeCircle();\n const pager = useCursorPager();\n const tr = useTr();\n const { data, isLoading, isError, refetch } = useComMyFeed({\n limit: PAGE_SIZE,\n cursor: pager.cursor,\n });\n\n const posts = data?.items ?? [];\n\n return (\n <PageLayout\n title={tr('comradecircle.pages.feed.title', 'Home')}\n titleGradient\n aurora\n description={tr(\n 'comradecircle.pages.feed.description',\n 'Posts from the circles, channels, and members you follow — newest first.'\n )}\n actions={\n <Button variant=\"outline\" onClick={() => navigateTo('circles')}>\n <Compass className=\"mr-1.5 h-4 w-4\" />{' '}\n {tr('comradecircle.pages.feed.discoverCircles', 'Discover circles')}\n </Button>\n }\n >\n <UpcomingEvents className=\"mb-5\" />\n\n {isLoading ? (\n <FeedSkeleton />\n ) : isError ? (\n <ErrorView\n message={tr('comradecircle.pages.feed.errorMessage', \"We couldn't load your feed.\")}\n onRetry={() => refetch()}\n />\n ) : posts.length === 0 && pager.page === 0 ? (\n <EmptyState\n illustration=\"empty-notifications\"\n icon={<Newspaper className=\"h-10 w-10\" />}\n title={tr('comradecircle.pages.feed.emptyTitle', 'Your feed is quiet')}\n description={tr(\n 'comradecircle.pages.feed.emptyDescription',\n 'Follow circles and members to fill your home feed with their latest posts, events, and discussions.'\n )}\n action={\n <div className=\"flex flex-wrap items-center justify-center gap-3\">\n <Button onClick={() => navigateTo('circles')}>\n <Compass className=\"mr-1.5 h-4 w-4\" />{' '}\n {tr('comradecircle.pages.feed.exploreCircles', 'Explore circles')}\n </Button>\n <Button variant=\"outline\" onClick={() => navigateTo('members')}>\n <UsersRound className=\"mr-1.5 h-4 w-4\" />{' '}\n {tr('comradecircle.pages.feed.findMembers', 'Find members')}\n </Button>\n </div>\n }\n />\n ) : (\n <div className=\"mx-auto flex max-w-2xl flex-col gap-4\">\n {posts.map((post, index) => (\n <div\n key={post.id}\n className={POST_ENTER}\n style={{ animationDelay: `${Math.min(index, 8) * 70}ms` }}\n >\n <PostCard post={post} />\n </div>\n ))}\n <Pagination\n page={pager.page}\n pageSize={PAGE_SIZE}\n itemCount={posts.length}\n hasMore={data?.pageInfo.hasMore ?? false}\n onPageChange={(target) => pager.onPageChange(target, data?.pageInfo.cursor)}\n />\n </div>\n )}\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CircleDetailPage.d.ts","sourceRoot":"","sources":["../../../../src/comradecircle/pages/circles/CircleDetailPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"CircleDetailPage.d.ts","sourceRoot":"","sources":["../../../../src/comradecircle/pages/circles/CircleDetailPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA2FH,wBAAgB,gBAAgB,4CA0J/B"}
|