@burdenoff/microfe-comradecircle 2026.723.1 → 2026.730.2

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.
Files changed (37) hide show
  1. package/dist/comradecircle/ComradeCircleRoutes.d.ts.map +1 -1
  2. package/dist/comradecircle/ComradeCircleRoutes.js +11 -7
  3. package/dist/comradecircle/ComradeCircleRoutes.js.map +1 -1
  4. package/dist/comradecircle/hooks/useComSubscription.d.ts +18 -0
  5. package/dist/comradecircle/hooks/useComSubscription.d.ts.map +1 -0
  6. package/dist/comradecircle/hooks/useComSubscription.js +110 -0
  7. package/dist/comradecircle/hooks/useComSubscription.js.map +1 -0
  8. package/dist/comradecircle/hooks/useComradeCircleApi.d.ts +51 -1
  9. package/dist/comradecircle/hooks/useComradeCircleApi.d.ts.map +1 -1
  10. package/dist/comradecircle/hooks/useComradeCircleApi.js +435 -223
  11. package/dist/comradecircle/hooks/useComradeCircleApi.js.map +1 -1
  12. package/dist/comradecircle/pages/circles/CircleDetailPage.d.ts.map +1 -1
  13. package/dist/comradecircle/pages/circles/CircleDetailPage.js +268 -266
  14. package/dist/comradecircle/pages/circles/CircleDetailPage.js.map +1 -1
  15. package/dist/comradecircle/pages/events/EventDetailPage.d.ts.map +1 -1
  16. package/dist/comradecircle/pages/events/EventDetailPage.js +84 -82
  17. package/dist/comradecircle/pages/events/EventDetailPage.js.map +1 -1
  18. package/dist/comradecircle/pages/members/MemberProfilePage.d.ts.map +1 -1
  19. package/dist/comradecircle/pages/members/MemberProfilePage.js +251 -129
  20. package/dist/comradecircle/pages/members/MemberProfilePage.js.map +1 -1
  21. package/dist/comradecircle/pages/monetization/MonetizationPage.d.ts +13 -0
  22. package/dist/comradecircle/pages/monetization/MonetizationPage.d.ts.map +1 -0
  23. package/dist/comradecircle/pages/monetization/MonetizationPage.js +596 -0
  24. package/dist/comradecircle/pages/monetization/MonetizationPage.js.map +1 -0
  25. package/dist/comradecircle/pages/posts/PostThreadPage.d.ts.map +1 -1
  26. package/dist/comradecircle/pages/posts/PostThreadPage.js +26 -24
  27. package/dist/comradecircle/pages/posts/PostThreadPage.js.map +1 -1
  28. package/dist/comradecircle/pages/profile/MyProfilePage.d.ts.map +1 -1
  29. package/dist/comradecircle/pages/profile/MyProfilePage.js +101 -96
  30. package/dist/comradecircle/pages/profile/MyProfilePage.js.map +1 -1
  31. package/dist/comradecircle/types/index.d.ts +126 -0
  32. package/dist/comradecircle/types/index.d.ts.map +1 -1
  33. package/dist/comradecircle/utils/shellBridge.d.ts +45 -0
  34. package/dist/comradecircle/utils/shellBridge.d.ts.map +1 -0
  35. package/dist/comradecircle/utils/shellBridge.js +19 -0
  36. package/dist/comradecircle/utils/shellBridge.js.map +1 -0
  37. package/package.json +1 -1
@@ -2,209 +2,331 @@ import { useComradeCircle as e } from "../../context/ComradeCircleContext.js";
2
2
  import "../../context/index.js";
3
3
  import { cn as t } from "../../utils/cn.js";
4
4
  import { PageLayout as n } from "../../components/PageLayout.js";
5
- import { useComFollow as r, useComMyFollows as i, useComProfile as a, useComUnfollow as o } from "../../hooks/useComradeCircleApi.js";
5
+ import { useComFollow as r, useComListDigitalProducts as i, useComListMembershipTiers as a, useComListPaidEvents as o, useComMyFollows as s, useComProfile as c, useComUnfollow as l } from "../../hooks/useComradeCircleApi.js";
6
6
  import "../../hooks/index.js";
7
- import { Avatar as s } from "../../components/Avatar.js";
8
- import { describeError as c, notify as l } from "../../lib/toast.js";
9
- import { EmptyState as u } from "../../components/EmptyState.js";
10
- import { ErrorView as d } from "../../components/StateViews.js";
11
- import { StatusBadge as f } from "../../components/StatusBadge.js";
12
- import { ArrowLeft as p, Pencil as m, UserCheck as h, UserMinus as g, UserPlus as _, UserX as v } from "lucide-react";
13
- import { useParams as y } from "react-router-dom";
14
- import { jsx as b, jsxs as x } from "react/jsx-runtime";
15
- import { AuroraBackground as S, Button as C, GlassCard as w, GradientText as T, Skeleton as E } from "@burdenoff/fe-libs/ui";
7
+ import { Avatar as u } from "../../components/Avatar.js";
8
+ import { describeError as d, notify as f } from "../../lib/toast.js";
9
+ import { EmptyState as p } from "../../components/EmptyState.js";
10
+ import { ErrorView as m } from "../../components/StateViews.js";
11
+ import { StatusBadge as h } from "../../components/StatusBadge.js";
12
+ import { ArrowLeft as g, Coins as _, Gift as v, Package as y, Pencil as b, Ticket as x, UserCheck as S, UserMinus as C, UserPlus as w, UserX as T } from "lucide-react";
13
+ import { useParams as E } from "react-router-dom";
14
+ import { jsx as D, jsxs as O } from "react/jsx-runtime";
15
+ import { AuroraBackground as k, Button as A, GlassCard as j, GradientText as M, Skeleton as N } from "@burdenoff/fe-libs/ui";
16
16
  //#region src/comradecircle/pages/members/MemberProfilePage.tsx
17
- function D({ items: e, variant: n }) {
18
- return /* @__PURE__ */ b("ul", {
17
+ function P(e, t) {
18
+ try {
19
+ return new Intl.NumberFormat(void 0, {
20
+ style: "currency",
21
+ currency: t
22
+ }).format(e);
23
+ } catch {
24
+ return `${t} ${e.toFixed(2)}`;
25
+ }
26
+ }
27
+ function F({ creatorId: e }) {
28
+ let t = a(e), n = o(e), r = i(e), s = t.data?.items ?? [], c = n.data?.items ?? [], l = r.data?.items ?? [], u = t.isLoading || n.isLoading || r.isLoading, d = s.length > 0 || c.length > 0 || l.length > 0;
29
+ return u || !d ? null : /* @__PURE__ */ O(j, {
30
+ treatment: "plain",
31
+ className: "flex flex-col gap-5 p-5 sm:p-6",
32
+ children: [
33
+ /* @__PURE__ */ O("div", {
34
+ className: "flex items-center gap-2",
35
+ children: [/* @__PURE__ */ D(_, { className: "h-4 w-4 text-accent" }), /* @__PURE__ */ D("h3", {
36
+ className: "text-base font-semibold text-text-primary",
37
+ children: "Support this creator"
38
+ })]
39
+ }),
40
+ /* @__PURE__ */ O("div", {
41
+ className: "flex items-start gap-2 rounded-lg border border-status-warning-border bg-status-warning-bg-subtle px-3 py-2 text-xs text-status-warning-text",
42
+ children: [/* @__PURE__ */ D(v, { className: "mt-0.5 h-3.5 w-3.5 shrink-0" }), "Payment integration pending — these are catalog listings, not a live checkout yet."]
43
+ }),
44
+ s.length > 0 && /* @__PURE__ */ O("div", {
45
+ className: "grid gap-2",
46
+ children: [/* @__PURE__ */ D("p", {
47
+ className: "text-xs font-medium text-text-tertiary",
48
+ children: "Membership tiers"
49
+ }), s.map((e) => /* @__PURE__ */ O("div", {
50
+ className: "flex items-center justify-between gap-3 rounded-lg border border-border-seam bg-bg-surface p-3",
51
+ children: [/* @__PURE__ */ O("div", {
52
+ className: "min-w-0",
53
+ children: [/* @__PURE__ */ D("p", {
54
+ className: "truncate text-sm font-medium text-text-primary",
55
+ children: e.name
56
+ }), e.description && /* @__PURE__ */ D("p", {
57
+ className: "truncate text-xs text-text-secondary",
58
+ children: e.description
59
+ })]
60
+ }), /* @__PURE__ */ O("div", {
61
+ className: "flex shrink-0 items-center gap-2",
62
+ children: [/* @__PURE__ */ O("span", {
63
+ className: "text-sm font-semibold tabular-nums text-text-primary",
64
+ children: [
65
+ P(e.priceAmount, e.currency),
66
+ "/",
67
+ e.billingInterval === "YEARLY" ? "yr" : "mo"
68
+ ]
69
+ }), /* @__PURE__ */ D(A, {
70
+ size: "sm",
71
+ disabled: !0,
72
+ title: "Payment integration pending",
73
+ children: "Support"
74
+ })]
75
+ })]
76
+ }, e.id))]
77
+ }),
78
+ c.length > 0 && /* @__PURE__ */ O("div", {
79
+ className: "grid gap-2",
80
+ children: [/* @__PURE__ */ D("p", {
81
+ className: "text-xs font-medium text-text-tertiary",
82
+ children: "Paid events"
83
+ }), c.map((e) => /* @__PURE__ */ O("div", {
84
+ className: "flex items-center justify-between gap-3 rounded-lg border border-border-seam bg-bg-surface p-3",
85
+ children: [/* @__PURE__ */ O("div", {
86
+ className: "flex min-w-0 items-center gap-2",
87
+ children: [/* @__PURE__ */ D(x, { className: "h-4 w-4 shrink-0 text-text-tertiary" }), /* @__PURE__ */ D("p", {
88
+ className: "truncate text-sm font-medium text-text-primary",
89
+ children: e.title
90
+ })]
91
+ }), /* @__PURE__ */ O("div", {
92
+ className: "flex shrink-0 items-center gap-2",
93
+ children: [/* @__PURE__ */ D("span", {
94
+ className: "text-sm font-semibold tabular-nums text-text-primary",
95
+ children: P(e.priceAmount, e.currency)
96
+ }), /* @__PURE__ */ D(A, {
97
+ size: "sm",
98
+ disabled: !0,
99
+ title: "Payment integration pending",
100
+ children: "Get ticket"
101
+ })]
102
+ })]
103
+ }, e.id))]
104
+ }),
105
+ l.length > 0 && /* @__PURE__ */ O("div", {
106
+ className: "grid gap-2",
107
+ children: [/* @__PURE__ */ D("p", {
108
+ className: "text-xs font-medium text-text-tertiary",
109
+ children: "Digital products"
110
+ }), l.map((e) => /* @__PURE__ */ O("div", {
111
+ className: "flex items-center justify-between gap-3 rounded-lg border border-border-seam bg-bg-surface p-3",
112
+ children: [/* @__PURE__ */ O("div", {
113
+ className: "flex min-w-0 items-center gap-2",
114
+ children: [/* @__PURE__ */ D(y, { className: "h-4 w-4 shrink-0 text-text-tertiary" }), /* @__PURE__ */ D("p", {
115
+ className: "truncate text-sm font-medium text-text-primary",
116
+ children: e.title
117
+ })]
118
+ }), /* @__PURE__ */ O("div", {
119
+ className: "flex shrink-0 items-center gap-2",
120
+ children: [/* @__PURE__ */ D("span", {
121
+ className: "text-sm font-semibold tabular-nums text-text-primary",
122
+ children: P(e.priceAmount, e.currency)
123
+ }), /* @__PURE__ */ D(A, {
124
+ size: "sm",
125
+ disabled: !0,
126
+ title: "Payment integration pending",
127
+ children: "Buy"
128
+ })]
129
+ })]
130
+ }, e.id))]
131
+ })
132
+ ]
133
+ });
134
+ }
135
+ function I({ items: e, variant: n }) {
136
+ return /* @__PURE__ */ D("ul", {
19
137
  className: "flex flex-wrap gap-2",
20
- children: e.map((e) => /* @__PURE__ */ b("li", {
138
+ children: e.map((e) => /* @__PURE__ */ D("li", {
21
139
  className: t("rounded-full px-3 py-1 text-xs font-medium motion-safe:transition-transform motion-safe:duration-150 motion-safe:hover:-translate-y-0.5", n === "interest" ? "bg-[var(--color-accent-soft)] text-accent" : "border border-border-seam text-text-primary hover:border-border-strong"),
22
140
  children: e
23
141
  }, e))
24
142
  });
25
143
  }
26
- function O() {
27
- return /* @__PURE__ */ x("div", {
144
+ function L() {
145
+ return /* @__PURE__ */ O("div", {
28
146
  className: "mx-auto flex max-w-2xl flex-col gap-6",
29
- children: [/* @__PURE__ */ x(w, {
147
+ children: [/* @__PURE__ */ O(j, {
30
148
  treatment: "plain",
31
149
  className: "overflow-hidden p-0",
32
- children: [/* @__PURE__ */ b(E, { className: "h-24 w-full rounded-none sm:h-28" }), /* @__PURE__ */ x("div", {
150
+ children: [/* @__PURE__ */ D(N, { className: "h-24 w-full rounded-none sm:h-28" }), /* @__PURE__ */ O("div", {
33
151
  className: "px-5 pb-5 sm:px-6 sm:pb-6",
34
- children: [/* @__PURE__ */ x("div", {
152
+ children: [/* @__PURE__ */ O("div", {
35
153
  className: "flex flex-col items-center gap-4 sm:flex-row sm:items-end",
36
- children: [/* @__PURE__ */ b(E, { className: "-mt-16 h-28 w-28 rounded-full sm:-mt-20" }), /* @__PURE__ */ x("div", {
154
+ children: [/* @__PURE__ */ D(N, { className: "-mt-16 h-28 w-28 rounded-full sm:-mt-20" }), /* @__PURE__ */ O("div", {
37
155
  className: "w-full space-y-2 pb-1 text-center sm:text-left",
38
156
  children: [
39
- /* @__PURE__ */ b(E, { className: "mx-auto h-7 w-44 sm:mx-0" }),
40
- /* @__PURE__ */ b(E, { className: "mx-auto h-4 w-56 sm:mx-0" }),
41
- /* @__PURE__ */ b(E, { className: "mx-auto h-5 w-20 rounded-full sm:mx-0" })
157
+ /* @__PURE__ */ D(N, { className: "mx-auto h-7 w-44 sm:mx-0" }),
158
+ /* @__PURE__ */ D(N, { className: "mx-auto h-4 w-56 sm:mx-0" }),
159
+ /* @__PURE__ */ D(N, { className: "mx-auto h-5 w-20 rounded-full sm:mx-0" })
42
160
  ]
43
161
  })]
44
- }), /* @__PURE__ */ x("div", {
162
+ }), /* @__PURE__ */ O("div", {
45
163
  className: "mt-5 space-y-2",
46
- children: [/* @__PURE__ */ b(E, { className: "h-4 w-full" }), /* @__PURE__ */ b(E, { className: "h-4 w-3/4" })]
164
+ children: [/* @__PURE__ */ D(N, { className: "h-4 w-full" }), /* @__PURE__ */ D(N, { className: "h-4 w-3/4" })]
47
165
  })]
48
166
  })]
49
- }), /* @__PURE__ */ b(w, {
167
+ }), /* @__PURE__ */ D(j, {
50
168
  treatment: "plain",
51
169
  className: "flex flex-col gap-6 p-5 sm:p-6",
52
- children: [0, 1].map((e) => /* @__PURE__ */ x("div", {
170
+ children: [0, 1].map((e) => /* @__PURE__ */ O("div", {
53
171
  className: "space-y-3",
54
- children: [/* @__PURE__ */ b(E, { className: "h-4 w-24" }), /* @__PURE__ */ b("div", {
172
+ children: [/* @__PURE__ */ D(N, { className: "h-4 w-24" }), /* @__PURE__ */ D("div", {
55
173
  className: "flex flex-wrap gap-2",
56
174
  children: [
57
175
  0,
58
176
  1,
59
177
  2,
60
178
  3
61
- ].map((e) => /* @__PURE__ */ b(E, { className: "h-6 w-20 rounded-full" }, e))
179
+ ].map((e) => /* @__PURE__ */ D(N, { className: "h-6 w-20 rounded-full" }, e))
62
180
  })]
63
181
  }, e))
64
182
  })]
65
183
  });
66
184
  }
67
- function k() {
68
- let { memberId: t } = y(), { navigateTo: E, currentUser: k } = e(), { data: A, isLoading: j, isError: M, refetch: N } = a(t), P = i("MEMBER"), F = r(), I = o(), L = /* @__PURE__ */ x(C, {
185
+ function R() {
186
+ let { memberId: t } = E(), { navigateTo: i, currentUser: a } = e(), { data: o, isLoading: _, isError: v, refetch: y } = c(t), x = s("MEMBER"), N = r(), P = l(), R = /* @__PURE__ */ O(A, {
69
187
  variant: "ghost",
70
188
  size: "sm",
71
- onClick: () => E("members"),
72
- children: [/* @__PURE__ */ b(p, { className: "mr-1.5 h-4 w-4" }), " Back"]
189
+ onClick: () => i("members"),
190
+ children: [/* @__PURE__ */ D(g, { className: "mr-1.5 h-4 w-4" }), " Back"]
73
191
  });
74
- if (j) return /* @__PURE__ */ b(n, {
192
+ if (_) return /* @__PURE__ */ D(n, {
75
193
  title: "Profile",
76
- actions: L,
77
- children: /* @__PURE__ */ b(O, {})
194
+ actions: R,
195
+ children: /* @__PURE__ */ D(L, {})
78
196
  });
79
- if (M) return /* @__PURE__ */ b(n, {
197
+ if (v) return /* @__PURE__ */ D(n, {
80
198
  title: "Profile",
81
- actions: L,
82
- children: /* @__PURE__ */ b(d, {
199
+ actions: R,
200
+ children: /* @__PURE__ */ D(m, {
83
201
  message: "We couldn't load this member's profile.",
84
- onRetry: () => N()
202
+ onRetry: () => y()
85
203
  })
86
204
  });
87
- if (!A) return /* @__PURE__ */ b(n, {
205
+ if (!o) return /* @__PURE__ */ D(n, {
88
206
  title: "Profile",
89
- actions: L,
90
- children: /* @__PURE__ */ b(u, {
91
- icon: /* @__PURE__ */ b(v, { className: "h-10 w-10" }),
207
+ actions: R,
208
+ children: /* @__PURE__ */ D(p, {
209
+ icon: /* @__PURE__ */ D(T, { className: "h-10 w-10" }),
92
210
  title: "No profile",
93
211
  description: "This member hasn't set up a ComradeCircle profile yet."
94
212
  })
95
213
  });
96
- let R = !!(t && k?.id === t), z = (P.data ?? []).some((e) => e.targetId === t && e.targetType === "MEMBER"), B = F.isPending || I.isPending, V = async () => {
214
+ let z = !!(t && a?.id === t), B = (x.data ?? []).some((e) => e.targetId === t && e.targetType === "MEMBER"), V = N.isPending || P.isPending, H = async () => {
97
215
  if (t) try {
98
- z ? (await I.mutateAsync({
216
+ B ? (await P.mutateAsync({
99
217
  targetId: t,
100
218
  targetType: "MEMBER"
101
- }), l.success("Unfollowed", A.displayName)) : (await F.mutateAsync({
219
+ }), f.success("Unfollowed", o.displayName)) : (await N.mutateAsync({
102
220
  targetId: t,
103
221
  targetType: "MEMBER"
104
- }), l.success("Following", A.displayName));
222
+ }), f.success("Following", o.displayName));
105
223
  } catch (e) {
106
- l.error("Could not update follow", c(e));
224
+ f.error("Could not update follow", d(e));
107
225
  }
108
- }, H = R ? /* @__PURE__ */ x(C, {
226
+ }, U = z ? /* @__PURE__ */ O(A, {
109
227
  variant: "outline",
110
- onClick: () => E("profile"),
111
- children: [/* @__PURE__ */ b(m, { className: "mr-1.5 h-4 w-4" }), " Edit profile"]
112
- }) : z ? /* @__PURE__ */ x(C, {
228
+ onClick: () => i("profile"),
229
+ children: [/* @__PURE__ */ D(b, { className: "mr-1.5 h-4 w-4" }), " Edit profile"]
230
+ }) : B ? /* @__PURE__ */ O(A, {
113
231
  variant: "outline",
114
- onClick: V,
115
- disabled: B,
116
- "aria-label": `Following ${A.displayName}. Activate to unfollow.`,
232
+ onClick: H,
233
+ disabled: V,
234
+ "aria-label": `Following ${o.displayName}. Activate to unfollow.`,
117
235
  className: "group/follow min-w-[8rem] justify-center motion-safe:transition-colors hover:border-status-error-border hover:bg-status-error-subtle hover:text-status-error-text",
118
236
  children: [
119
- /* @__PURE__ */ b(h, { className: "mr-1.5 h-4 w-4 group-hover/follow:hidden" }),
120
- /* @__PURE__ */ b(g, { className: "mr-1.5 hidden h-4 w-4 group-hover/follow:inline" }),
121
- /* @__PURE__ */ b("span", {
237
+ /* @__PURE__ */ D(S, { className: "mr-1.5 h-4 w-4 group-hover/follow:hidden" }),
238
+ /* @__PURE__ */ D(C, { className: "mr-1.5 hidden h-4 w-4 group-hover/follow:inline" }),
239
+ /* @__PURE__ */ D("span", {
122
240
  className: "group-hover/follow:hidden",
123
241
  children: "Following"
124
242
  }),
125
- /* @__PURE__ */ b("span", {
243
+ /* @__PURE__ */ D("span", {
126
244
  className: "hidden group-hover/follow:inline",
127
245
  children: "Unfollow"
128
246
  })
129
247
  ]
130
- }) : /* @__PURE__ */ x(C, {
131
- onClick: V,
132
- disabled: B,
133
- children: [/* @__PURE__ */ b(_, { className: "mr-1.5 h-4 w-4" }), " Follow"]
134
- }), U = A.interests.length > 0 || A.skills.length > 0;
135
- return /* @__PURE__ */ b(n, {
248
+ }) : /* @__PURE__ */ O(A, {
249
+ onClick: H,
250
+ disabled: V,
251
+ children: [/* @__PURE__ */ D(w, { className: "mr-1.5 h-4 w-4" }), " Follow"]
252
+ }), W = o.interests.length > 0 || o.skills.length > 0;
253
+ return /* @__PURE__ */ D(n, {
136
254
  title: "Profile",
137
- actions: L,
138
- children: /* @__PURE__ */ x("div", {
255
+ actions: R,
256
+ children: /* @__PURE__ */ O("div", {
139
257
  className: "mx-auto flex max-w-2xl flex-col gap-6",
140
- children: [/* @__PURE__ */ x(w, {
141
- treatment: "plain",
142
- className: "overflow-hidden p-0",
143
- children: [/* @__PURE__ */ b("div", {
144
- className: "relative h-24 overflow-hidden bg-gloss-card sm:h-28",
145
- children: /* @__PURE__ */ b(S, { intensity: "subtle" })
146
- }), /* @__PURE__ */ x("div", {
147
- className: "px-5 pb-5 sm:px-6 sm:pb-6",
148
- children: [/* @__PURE__ */ x("div", {
149
- className: "flex flex-col gap-4 sm:flex-row sm:items-end sm:justify-between",
150
- children: [/* @__PURE__ */ x("div", {
151
- className: "flex flex-col items-center gap-4 sm:flex-row sm:items-end",
152
- children: [/* @__PURE__ */ b(s, {
153
- name: A.displayName,
154
- presence: A.presence,
155
- size: "2xl",
156
- seed: A.memberId,
157
- fileId: A.avatar?.id,
158
- ring: !0,
159
- className: "-mt-16 sm:-mt-20"
160
- }), /* @__PURE__ */ x("div", {
161
- className: "min-w-0 pb-1 text-center sm:text-left",
162
- children: [
163
- /* @__PURE__ */ b(T, {
164
- as: "h2",
165
- className: "text-2xl font-semibold sm:text-[1.75rem]",
166
- children: A.displayName
167
- }),
168
- A.headline && /* @__PURE__ */ b("p", {
169
- className: "mt-1 text-sm text-text-secondary",
170
- children: A.headline
171
- }),
172
- /* @__PURE__ */ b("div", {
173
- className: "mt-3 flex justify-center sm:justify-start",
174
- children: /* @__PURE__ */ b(f, { status: A.presence })
175
- })
176
- ]
258
+ children: [
259
+ /* @__PURE__ */ O(j, {
260
+ treatment: "plain",
261
+ className: "overflow-hidden p-0",
262
+ children: [/* @__PURE__ */ D("div", {
263
+ className: "relative h-24 overflow-hidden bg-gloss-card sm:h-28",
264
+ children: /* @__PURE__ */ D(k, { intensity: "subtle" })
265
+ }), /* @__PURE__ */ O("div", {
266
+ className: "px-5 pb-5 sm:px-6 sm:pb-6",
267
+ children: [/* @__PURE__ */ O("div", {
268
+ className: "flex flex-col gap-4 sm:flex-row sm:items-end sm:justify-between",
269
+ children: [/* @__PURE__ */ O("div", {
270
+ className: "flex flex-col items-center gap-4 sm:flex-row sm:items-end",
271
+ children: [/* @__PURE__ */ D(u, {
272
+ name: o.displayName,
273
+ presence: o.presence,
274
+ size: "2xl",
275
+ seed: o.memberId,
276
+ fileId: o.avatar?.id,
277
+ ring: !0,
278
+ className: "-mt-16 sm:-mt-20"
279
+ }), /* @__PURE__ */ O("div", {
280
+ className: "min-w-0 pb-1 text-center sm:text-left",
281
+ children: [
282
+ /* @__PURE__ */ D(M, {
283
+ as: "h2",
284
+ className: "text-2xl font-semibold sm:text-[1.75rem]",
285
+ children: o.displayName
286
+ }),
287
+ o.headline && /* @__PURE__ */ D("p", {
288
+ className: "mt-1 text-sm text-text-secondary",
289
+ children: o.headline
290
+ }),
291
+ /* @__PURE__ */ D("div", {
292
+ className: "mt-3 flex justify-center sm:justify-start",
293
+ children: /* @__PURE__ */ D(h, { status: o.presence })
294
+ })
295
+ ]
296
+ })]
297
+ }), /* @__PURE__ */ D("div", {
298
+ className: "flex shrink-0 justify-center pb-1 sm:justify-end",
299
+ children: U
177
300
  })]
178
- }), /* @__PURE__ */ b("div", {
179
- className: "flex shrink-0 justify-center pb-1 sm:justify-end",
180
- children: H
301
+ }), o.bio && /* @__PURE__ */ D("p", {
302
+ className: "mt-5 whitespace-pre-wrap text-sm leading-relaxed text-text-secondary",
303
+ children: o.bio
181
304
  })]
182
- }), A.bio && /* @__PURE__ */ b("p", {
183
- className: "mt-5 whitespace-pre-wrap text-sm leading-relaxed text-text-secondary",
184
- children: A.bio
185
305
  })]
186
- })]
187
- }), U && /* @__PURE__ */ x(w, {
188
- treatment: "plain",
189
- className: "flex flex-col gap-6 p-5 sm:p-6",
190
- children: [A.interests.length > 0 && /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("h3", {
191
- className: "mb-3 text-base font-semibold text-text-primary",
192
- children: "Interests"
193
- }), /* @__PURE__ */ b(D, {
194
- items: A.interests,
195
- variant: "interest"
196
- })] }), A.skills.length > 0 && /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("h3", {
197
- className: "mb-3 text-base font-semibold text-text-primary",
198
- children: "Skills"
199
- }), /* @__PURE__ */ b(D, {
200
- items: A.skills,
201
- variant: "skill"
202
- })] })]
203
- })]
306
+ }),
307
+ W && /* @__PURE__ */ O(j, {
308
+ treatment: "plain",
309
+ className: "flex flex-col gap-6 p-5 sm:p-6",
310
+ children: [o.interests.length > 0 && /* @__PURE__ */ O("div", { children: [/* @__PURE__ */ D("h3", {
311
+ className: "mb-3 text-base font-semibold text-text-primary",
312
+ children: "Interests"
313
+ }), /* @__PURE__ */ D(I, {
314
+ items: o.interests,
315
+ variant: "interest"
316
+ })] }), o.skills.length > 0 && /* @__PURE__ */ O("div", { children: [/* @__PURE__ */ D("h3", {
317
+ className: "mb-3 text-base font-semibold text-text-primary",
318
+ children: "Skills"
319
+ }), /* @__PURE__ */ D(I, {
320
+ items: o.skills,
321
+ variant: "skill"
322
+ })] })]
323
+ }),
324
+ t && /* @__PURE__ */ D(F, { creatorId: t })
325
+ ]
204
326
  })
205
327
  });
206
328
  }
207
329
  //#endregion
208
- export { k as MemberProfilePage };
330
+ export { R as MemberProfilePage };
209
331
 
210
332
  //# sourceMappingURL=MemberProfilePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MemberProfilePage.js","names":[],"sources":["../../../../src/comradecircle/pages/members/MemberProfilePage.tsx"],"sourcesContent":["/**\n * MemberProfilePage — a single member's public social profile.\n * @module comradecircle/pages/members\n *\n * Reads `comProfile(memberId)` (the social-identity layer). The visitor can\n * follow / unfollow the member (state derived from `comMyFollows('MEMBER')`);\n * on their own profile the action becomes an \"Edit profile\" shortcut. Interests\n * and skills render as differentiated chips (accent-tinted vs. outlined) and\n * hide when empty. The identity card gets a social-hero treatment: a living\n * gloss/aurora cover strip with the avatar overlapping upward onto it.\n */\n\nimport { ArrowLeft, UserX, UserMinus, UserPlus, UserCheck, Pencil } from 'lucide-react';\nimport { Button, GlassCard, GradientText, AuroraBackground, Skeleton } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { Avatar } from '../../components/Avatar';\nimport { StatusBadge } from '../../components/StatusBadge';\nimport { EmptyState } from '../../components/EmptyState';\nimport { ErrorView } from '../../components/StateViews';\nimport { useComProfile, useComMyFollows, useComFollow, useComUnfollow } from '../../hooks';\nimport { useComradeCircle } from '../../context';\nimport { notify, describeError } from '../../lib/toast';\nimport { cn } from '../../utils/cn';\nimport { useParams } from 'react-router-dom';\n\n/**\n * A wrap of tag chips. `interest` chips read as accent-tinted affinities;\n * `skill` chips read as outlined competencies — a quiet visual grammar that\n * lets the two sets be told apart at a glance. Hover gives a tasteful lift.\n */\nfunction ChipList({ items, variant }: { items: string[]; variant: 'interest' | 'skill' }) {\n return (\n <ul className=\"flex flex-wrap gap-2\">\n {items.map((item) => (\n <li\n key={item}\n className={cn(\n 'rounded-full px-3 py-1 text-xs font-medium motion-safe:transition-transform motion-safe:duration-150 motion-safe:hover:-translate-y-0.5',\n variant === 'interest'\n ? 'bg-[var(--color-accent-soft)] text-accent'\n : 'border border-border-seam text-text-primary hover:border-border-strong'\n )}\n >\n {item}\n </li>\n ))}\n </ul>\n );\n}\n\n/** Profile-shaped skeleton — mirrors the hero cover strip, overlapping avatar,\n * identity block and the two chip sections so the layout doesn't jump. */\nfunction ProfileSkeleton() {\n return (\n <div className=\"mx-auto flex max-w-2xl flex-col gap-6\">\n <GlassCard treatment=\"plain\" className=\"overflow-hidden p-0\">\n <Skeleton className=\"h-24 w-full rounded-none sm:h-28\" />\n <div className=\"px-5 pb-5 sm:px-6 sm:pb-6\">\n <div className=\"flex flex-col items-center gap-4 sm:flex-row sm:items-end\">\n <Skeleton className=\"-mt-16 h-28 w-28 rounded-full sm:-mt-20\" />\n <div className=\"w-full space-y-2 pb-1 text-center sm:text-left\">\n <Skeleton className=\"mx-auto h-7 w-44 sm:mx-0\" />\n <Skeleton className=\"mx-auto h-4 w-56 sm:mx-0\" />\n <Skeleton className=\"mx-auto h-5 w-20 rounded-full sm:mx-0\" />\n </div>\n </div>\n <div className=\"mt-5 space-y-2\">\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-4 w-3/4\" />\n </div>\n </div>\n </GlassCard>\n <GlassCard treatment=\"plain\" className=\"flex flex-col gap-6 p-5 sm:p-6\">\n {[0, 1].map((s) => (\n <div key={s} className=\"space-y-3\">\n <Skeleton className=\"h-4 w-24\" />\n <div className=\"flex flex-wrap gap-2\">\n {[0, 1, 2, 3].map((c) => (\n <Skeleton key={c} className=\"h-6 w-20 rounded-full\" />\n ))}\n </div>\n </div>\n ))}\n </GlassCard>\n </div>\n );\n}\n\nexport function MemberProfilePage() {\n const { memberId } = useParams<{ memberId: string }>();\n const { navigateTo, currentUser } = useComradeCircle();\n const { data: profile, isLoading, isError, refetch } = useComProfile(memberId);\n\n const follows = useComMyFollows('MEMBER');\n const follow = useComFollow();\n const unfollow = useComUnfollow();\n\n const back = (\n <Button variant=\"ghost\" size=\"sm\" onClick={() => navigateTo('members')}>\n <ArrowLeft className=\"mr-1.5 h-4 w-4\" /> Back\n </Button>\n );\n\n if (isLoading) {\n return (\n <PageLayout title=\"Profile\" actions={back}>\n <ProfileSkeleton />\n </PageLayout>\n );\n }\n\n if (isError) {\n return (\n <PageLayout title=\"Profile\" actions={back}>\n <ErrorView message=\"We couldn't load this member's profile.\" onRetry={() => refetch()} />\n </PageLayout>\n );\n }\n\n if (!profile) {\n return (\n <PageLayout title=\"Profile\" actions={back}>\n <EmptyState\n icon={<UserX className=\"h-10 w-10\" />}\n title=\"No profile\"\n description=\"This member hasn't set up a ComradeCircle profile yet.\"\n />\n </PageLayout>\n );\n }\n\n const isSelf = Boolean(memberId && currentUser?.id === memberId);\n const isFollowing = (follows.data ?? []).some(\n (f) => f.targetId === memberId && f.targetType === 'MEMBER'\n );\n const followPending = follow.isPending || unfollow.isPending;\n\n const toggleFollow = async () => {\n if (!memberId) return;\n try {\n if (isFollowing) {\n await unfollow.mutateAsync({ targetId: memberId, targetType: 'MEMBER' });\n notify.success('Unfollowed', profile.displayName);\n } else {\n await follow.mutateAsync({ targetId: memberId, targetType: 'MEMBER' });\n notify.success('Following', profile.displayName);\n }\n } catch (err) {\n notify.error('Could not update follow', describeError(err));\n }\n };\n\n const action = isSelf ? (\n <Button variant=\"outline\" onClick={() => navigateTo('profile')}>\n <Pencil className=\"mr-1.5 h-4 w-4\" /> Edit profile\n </Button>\n ) : isFollowing ? (\n <Button\n variant=\"outline\"\n onClick={toggleFollow}\n disabled={followPending}\n aria-label={`Following ${profile.displayName}. Activate to unfollow.`}\n className=\"group/follow min-w-[8rem] justify-center motion-safe:transition-colors hover:border-status-error-border hover:bg-status-error-subtle hover:text-status-error-text\"\n >\n <UserCheck className=\"mr-1.5 h-4 w-4 group-hover/follow:hidden\" />\n <UserMinus className=\"mr-1.5 hidden h-4 w-4 group-hover/follow:inline\" />\n <span className=\"group-hover/follow:hidden\">Following</span>\n <span className=\"hidden group-hover/follow:inline\">Unfollow</span>\n </Button>\n ) : (\n <Button onClick={toggleFollow} disabled={followPending}>\n <UserPlus className=\"mr-1.5 h-4 w-4\" /> Follow\n </Button>\n );\n\n const hasTags = profile.interests.length > 0 || profile.skills.length > 0;\n\n return (\n <PageLayout title=\"Profile\" actions={back}>\n <div className=\"mx-auto flex max-w-2xl flex-col gap-6\">\n {/* Identity hero */}\n <GlassCard treatment=\"plain\" className=\"overflow-hidden p-0\">\n {/* Living cover strip — gloss + drifting aurora, reduced-motion safe */}\n <div className=\"relative h-24 overflow-hidden bg-gloss-card sm:h-28\">\n <AuroraBackground intensity=\"subtle\" />\n </div>\n\n <div className=\"px-5 pb-5 sm:px-6 sm:pb-6\">\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-end sm:justify-between\">\n <div className=\"flex flex-col items-center gap-4 sm:flex-row sm:items-end\">\n <Avatar\n name={profile.displayName}\n presence={profile.presence}\n size=\"2xl\"\n seed={profile.memberId}\n fileId={profile.avatar?.id}\n ring\n className=\"-mt-16 sm:-mt-20\"\n />\n <div className=\"min-w-0 pb-1 text-center sm:text-left\">\n <GradientText as=\"h2\" className=\"text-2xl font-semibold sm:text-[1.75rem]\">\n {profile.displayName}\n </GradientText>\n {profile.headline && (\n <p className=\"mt-1 text-sm text-text-secondary\">{profile.headline}</p>\n )}\n <div className=\"mt-3 flex justify-center sm:justify-start\">\n <StatusBadge status={profile.presence} />\n </div>\n </div>\n </div>\n <div className=\"flex shrink-0 justify-center pb-1 sm:justify-end\">{action}</div>\n </div>\n\n {profile.bio && (\n <p className=\"mt-5 whitespace-pre-wrap text-sm leading-relaxed text-text-secondary\">\n {profile.bio}\n </p>\n )}\n </div>\n </GlassCard>\n\n {/* Interests & skills — differentiated chip grammar */}\n {hasTags && (\n <GlassCard treatment=\"plain\" className=\"flex flex-col gap-6 p-5 sm:p-6\">\n {profile.interests.length > 0 && (\n <div>\n <h3 className=\"mb-3 text-base font-semibold text-text-primary\">Interests</h3>\n <ChipList items={profile.interests} variant=\"interest\" />\n </div>\n )}\n {profile.skills.length > 0 && (\n <div>\n <h3 className=\"mb-3 text-base font-semibold text-text-primary\">Skills</h3>\n <ChipList items={profile.skills} variant=\"skill\" />\n </div>\n )}\n </GlassCard>\n )}\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"MemberProfilePage.js","names":[],"sources":["../../../../src/comradecircle/pages/members/MemberProfilePage.tsx"],"sourcesContent":["/**\n * MemberProfilePage — a single member's public social profile.\n * @module comradecircle/pages/members\n *\n * Reads `comProfile(memberId)` (the social-identity layer). The visitor can\n * follow / unfollow the member (state derived from `comMyFollows('MEMBER')`);\n * on their own profile the action becomes an \"Edit profile\" shortcut. Interests\n * and skills render as differentiated chips (accent-tinted vs. outlined) and\n * hide when empty. The identity card gets a social-hero treatment: a living\n * gloss/aurora cover strip with the avatar overlapping upward onto it.\n */\n\nimport {\n ArrowLeft,\n Coins,\n Gift,\n Package,\n Ticket,\n UserX,\n UserMinus,\n UserPlus,\n UserCheck,\n Pencil,\n} from 'lucide-react';\nimport { Button, GlassCard, GradientText, AuroraBackground, Skeleton } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { Avatar } from '../../components/Avatar';\nimport { StatusBadge } from '../../components/StatusBadge';\nimport { EmptyState } from '../../components/EmptyState';\nimport { ErrorView } from '../../components/StateViews';\nimport {\n useComProfile,\n useComMyFollows,\n useComFollow,\n useComUnfollow,\n useComListMembershipTiers,\n useComListPaidEvents,\n useComListDigitalProducts,\n} from '../../hooks';\nimport { useComradeCircle } from '../../context';\nimport { notify, describeError } from '../../lib/toast';\nimport { cn } from '../../utils/cn';\nimport { useParams } from 'react-router-dom';\n\nfunction formatMoney(amount: number, currency: string): string {\n try {\n return new Intl.NumberFormat(undefined, { style: 'currency', currency }).format(amount);\n } catch {\n return `${currency} ${amount.toFixed(2)}`;\n }\n}\n\n/**\n * Fan-facing \"Support this creator\" panel — browses the creator's PUBLISHED\n * membership tiers / paid events / digital products (BOFF-4454 bounded\n * monetization CATALOG core). Every purchase CTA is disabled with a\n * \"Payment integration pending\" label: this ticket ships pricing/catalog\n * only, never a live checkout.\n */\nfunction SupportCreatorSection({ creatorId }: { creatorId: string }) {\n const tiers = useComListMembershipTiers(creatorId);\n const events = useComListPaidEvents(creatorId);\n const products = useComListDigitalProducts(creatorId);\n\n const tierItems = tiers.data?.items ?? [];\n const eventItems = events.data?.items ?? [];\n const productItems = products.data?.items ?? [];\n const isLoading = tiers.isLoading || events.isLoading || products.isLoading;\n const hasAnything = tierItems.length > 0 || eventItems.length > 0 || productItems.length > 0;\n\n if (isLoading || !hasAnything) return null;\n\n return (\n <GlassCard treatment=\"plain\" className=\"flex flex-col gap-5 p-5 sm:p-6\">\n <div className=\"flex items-center gap-2\">\n <Coins className=\"h-4 w-4 text-accent\" />\n <h3 className=\"text-base font-semibold text-text-primary\">Support this creator</h3>\n </div>\n <div className=\"flex items-start gap-2 rounded-lg border border-status-warning-border bg-status-warning-bg-subtle px-3 py-2 text-xs text-status-warning-text\">\n <Gift className=\"mt-0.5 h-3.5 w-3.5 shrink-0\" />\n Payment integration pending — these are catalog listings, not a live checkout yet.\n </div>\n\n {tierItems.length > 0 && (\n <div className=\"grid gap-2\">\n <p className=\"text-xs font-medium text-text-tertiary\">Membership tiers</p>\n {tierItems.map((tier) => (\n <div\n key={tier.id}\n className=\"flex items-center justify-between gap-3 rounded-lg border border-border-seam bg-bg-surface p-3\"\n >\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-medium text-text-primary\">{tier.name}</p>\n {tier.description && (\n <p className=\"truncate text-xs text-text-secondary\">{tier.description}</p>\n )}\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n <span className=\"text-sm font-semibold tabular-nums text-text-primary\">\n {formatMoney(tier.priceAmount, tier.currency)}/\n {tier.billingInterval === 'YEARLY' ? 'yr' : 'mo'}\n </span>\n <Button size=\"sm\" disabled title=\"Payment integration pending\">\n Support\n </Button>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {eventItems.length > 0 && (\n <div className=\"grid gap-2\">\n <p className=\"text-xs font-medium text-text-tertiary\">Paid events</p>\n {eventItems.map((event) => (\n <div\n key={event.id}\n className=\"flex items-center justify-between gap-3 rounded-lg border border-border-seam bg-bg-surface p-3\"\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n <Ticket className=\"h-4 w-4 shrink-0 text-text-tertiary\" />\n <p className=\"truncate text-sm font-medium text-text-primary\">{event.title}</p>\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n <span className=\"text-sm font-semibold tabular-nums text-text-primary\">\n {formatMoney(event.priceAmount, event.currency)}\n </span>\n <Button size=\"sm\" disabled title=\"Payment integration pending\">\n Get ticket\n </Button>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {productItems.length > 0 && (\n <div className=\"grid gap-2\">\n <p className=\"text-xs font-medium text-text-tertiary\">Digital products</p>\n {productItems.map((product) => (\n <div\n key={product.id}\n className=\"flex items-center justify-between gap-3 rounded-lg border border-border-seam bg-bg-surface p-3\"\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n <Package className=\"h-4 w-4 shrink-0 text-text-tertiary\" />\n <p className=\"truncate text-sm font-medium text-text-primary\">{product.title}</p>\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n <span className=\"text-sm font-semibold tabular-nums text-text-primary\">\n {formatMoney(product.priceAmount, product.currency)}\n </span>\n <Button size=\"sm\" disabled title=\"Payment integration pending\">\n Buy\n </Button>\n </div>\n </div>\n ))}\n </div>\n )}\n </GlassCard>\n );\n}\n\n/**\n * A wrap of tag chips. `interest` chips read as accent-tinted affinities;\n * `skill` chips read as outlined competencies — a quiet visual grammar that\n * lets the two sets be told apart at a glance. Hover gives a tasteful lift.\n */\nfunction ChipList({ items, variant }: { items: string[]; variant: 'interest' | 'skill' }) {\n return (\n <ul className=\"flex flex-wrap gap-2\">\n {items.map((item) => (\n <li\n key={item}\n className={cn(\n 'rounded-full px-3 py-1 text-xs font-medium motion-safe:transition-transform motion-safe:duration-150 motion-safe:hover:-translate-y-0.5',\n variant === 'interest'\n ? 'bg-[var(--color-accent-soft)] text-accent'\n : 'border border-border-seam text-text-primary hover:border-border-strong'\n )}\n >\n {item}\n </li>\n ))}\n </ul>\n );\n}\n\n/** Profile-shaped skeleton — mirrors the hero cover strip, overlapping avatar,\n * identity block and the two chip sections so the layout doesn't jump. */\nfunction ProfileSkeleton() {\n return (\n <div className=\"mx-auto flex max-w-2xl flex-col gap-6\">\n <GlassCard treatment=\"plain\" className=\"overflow-hidden p-0\">\n <Skeleton className=\"h-24 w-full rounded-none sm:h-28\" />\n <div className=\"px-5 pb-5 sm:px-6 sm:pb-6\">\n <div className=\"flex flex-col items-center gap-4 sm:flex-row sm:items-end\">\n <Skeleton className=\"-mt-16 h-28 w-28 rounded-full sm:-mt-20\" />\n <div className=\"w-full space-y-2 pb-1 text-center sm:text-left\">\n <Skeleton className=\"mx-auto h-7 w-44 sm:mx-0\" />\n <Skeleton className=\"mx-auto h-4 w-56 sm:mx-0\" />\n <Skeleton className=\"mx-auto h-5 w-20 rounded-full sm:mx-0\" />\n </div>\n </div>\n <div className=\"mt-5 space-y-2\">\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-4 w-3/4\" />\n </div>\n </div>\n </GlassCard>\n <GlassCard treatment=\"plain\" className=\"flex flex-col gap-6 p-5 sm:p-6\">\n {[0, 1].map((s) => (\n <div key={s} className=\"space-y-3\">\n <Skeleton className=\"h-4 w-24\" />\n <div className=\"flex flex-wrap gap-2\">\n {[0, 1, 2, 3].map((c) => (\n <Skeleton key={c} className=\"h-6 w-20 rounded-full\" />\n ))}\n </div>\n </div>\n ))}\n </GlassCard>\n </div>\n );\n}\n\nexport function MemberProfilePage() {\n const { memberId } = useParams<{ memberId: string }>();\n const { navigateTo, currentUser } = useComradeCircle();\n const { data: profile, isLoading, isError, refetch } = useComProfile(memberId);\n\n const follows = useComMyFollows('MEMBER');\n const follow = useComFollow();\n const unfollow = useComUnfollow();\n\n const back = (\n <Button variant=\"ghost\" size=\"sm\" onClick={() => navigateTo('members')}>\n <ArrowLeft className=\"mr-1.5 h-4 w-4\" /> Back\n </Button>\n );\n\n if (isLoading) {\n return (\n <PageLayout title=\"Profile\" actions={back}>\n <ProfileSkeleton />\n </PageLayout>\n );\n }\n\n if (isError) {\n return (\n <PageLayout title=\"Profile\" actions={back}>\n <ErrorView message=\"We couldn't load this member's profile.\" onRetry={() => refetch()} />\n </PageLayout>\n );\n }\n\n if (!profile) {\n return (\n <PageLayout title=\"Profile\" actions={back}>\n <EmptyState\n icon={<UserX className=\"h-10 w-10\" />}\n title=\"No profile\"\n description=\"This member hasn't set up a ComradeCircle profile yet.\"\n />\n </PageLayout>\n );\n }\n\n const isSelf = Boolean(memberId && currentUser?.id === memberId);\n const isFollowing = (follows.data ?? []).some(\n (f) => f.targetId === memberId && f.targetType === 'MEMBER'\n );\n const followPending = follow.isPending || unfollow.isPending;\n\n const toggleFollow = async () => {\n if (!memberId) return;\n try {\n if (isFollowing) {\n await unfollow.mutateAsync({ targetId: memberId, targetType: 'MEMBER' });\n notify.success('Unfollowed', profile.displayName);\n } else {\n await follow.mutateAsync({ targetId: memberId, targetType: 'MEMBER' });\n notify.success('Following', profile.displayName);\n }\n } catch (err) {\n notify.error('Could not update follow', describeError(err));\n }\n };\n\n const action = isSelf ? (\n <Button variant=\"outline\" onClick={() => navigateTo('profile')}>\n <Pencil className=\"mr-1.5 h-4 w-4\" /> Edit profile\n </Button>\n ) : isFollowing ? (\n <Button\n variant=\"outline\"\n onClick={toggleFollow}\n disabled={followPending}\n aria-label={`Following ${profile.displayName}. Activate to unfollow.`}\n className=\"group/follow min-w-[8rem] justify-center motion-safe:transition-colors hover:border-status-error-border hover:bg-status-error-subtle hover:text-status-error-text\"\n >\n <UserCheck className=\"mr-1.5 h-4 w-4 group-hover/follow:hidden\" />\n <UserMinus className=\"mr-1.5 hidden h-4 w-4 group-hover/follow:inline\" />\n <span className=\"group-hover/follow:hidden\">Following</span>\n <span className=\"hidden group-hover/follow:inline\">Unfollow</span>\n </Button>\n ) : (\n <Button onClick={toggleFollow} disabled={followPending}>\n <UserPlus className=\"mr-1.5 h-4 w-4\" /> Follow\n </Button>\n );\n\n const hasTags = profile.interests.length > 0 || profile.skills.length > 0;\n\n return (\n <PageLayout title=\"Profile\" actions={back}>\n <div className=\"mx-auto flex max-w-2xl flex-col gap-6\">\n {/* Identity hero */}\n <GlassCard treatment=\"plain\" className=\"overflow-hidden p-0\">\n {/* Living cover strip — gloss + drifting aurora, reduced-motion safe */}\n <div className=\"relative h-24 overflow-hidden bg-gloss-card sm:h-28\">\n <AuroraBackground intensity=\"subtle\" />\n </div>\n\n <div className=\"px-5 pb-5 sm:px-6 sm:pb-6\">\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-end sm:justify-between\">\n <div className=\"flex flex-col items-center gap-4 sm:flex-row sm:items-end\">\n <Avatar\n name={profile.displayName}\n presence={profile.presence}\n size=\"2xl\"\n seed={profile.memberId}\n fileId={profile.avatar?.id}\n ring\n className=\"-mt-16 sm:-mt-20\"\n />\n <div className=\"min-w-0 pb-1 text-center sm:text-left\">\n <GradientText as=\"h2\" className=\"text-2xl font-semibold sm:text-[1.75rem]\">\n {profile.displayName}\n </GradientText>\n {profile.headline && (\n <p className=\"mt-1 text-sm text-text-secondary\">{profile.headline}</p>\n )}\n <div className=\"mt-3 flex justify-center sm:justify-start\">\n <StatusBadge status={profile.presence} />\n </div>\n </div>\n </div>\n <div className=\"flex shrink-0 justify-center pb-1 sm:justify-end\">{action}</div>\n </div>\n\n {profile.bio && (\n <p className=\"mt-5 whitespace-pre-wrap text-sm leading-relaxed text-text-secondary\">\n {profile.bio}\n </p>\n )}\n </div>\n </GlassCard>\n\n {/* Interests & skills — differentiated chip grammar */}\n {hasTags && (\n <GlassCard treatment=\"plain\" className=\"flex flex-col gap-6 p-5 sm:p-6\">\n {profile.interests.length > 0 && (\n <div>\n <h3 className=\"mb-3 text-base font-semibold text-text-primary\">Interests</h3>\n <ChipList items={profile.interests} variant=\"interest\" />\n </div>\n )}\n {profile.skills.length > 0 && (\n <div>\n <h3 className=\"mb-3 text-base font-semibold text-text-primary\">Skills</h3>\n <ChipList items={profile.skills} variant=\"skill\" />\n </div>\n )}\n </GlassCard>\n )}\n\n {/* Creator monetization catalog — browse-only, payment pending (BOFF-4454) */}\n {memberId && <SupportCreatorSection creatorId={memberId} />}\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * MonetizationPage — creator-facing monetization management console (BOFF-4454).
3
+ * @module comradecircle/pages/monetization
4
+ *
5
+ * Bounded pricing/catalog CATALOG core: a creator manages their own membership
6
+ * tiers, paid events, and digital products (create + archive), and reviews the
7
+ * tip intents they've received. Nothing here talks to a payment processor —
8
+ * `comCreatorHasPaymentsEnabled` always resolves false today, so this page
9
+ * never claims a real checkout exists. Live payment processing and payout/
10
+ * revenue-split accounting are a separate, larger follow-up ticket.
11
+ */
12
+ export declare function MonetizationPage(): import("react/jsx-runtime").JSX.Element;
13
+ //# sourceMappingURL=MonetizationPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MonetizationPage.d.ts","sourceRoot":"","sources":["../../../../src/comradecircle/pages/monetization/MonetizationPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA6nBH,wBAAgB,gBAAgB,4CAqC/B"}