@tryghost/activitypub 3.1.9 → 3.1.13

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 (84) hide show
  1. package/dist/activitypub.js +1 -1
  2. package/dist/{at-sign-HA7s9_yo.mjs → at-sign-WxdwrLgJ.mjs} +3 -3
  3. package/dist/at-sign-WxdwrLgJ.mjs.map +1 -0
  4. package/dist/{avatar-flipboard-swo-37SU.mjs → avatar-flipboard-DSiWdH0F.mjs} +3 -3
  5. package/dist/avatar-flipboard-DSiWdH0F.mjs.map +1 -0
  6. package/dist/{bluesky-sharing-CLCMkEbr.mjs → bluesky-sharing-B86jF6P2.mjs} +7 -7
  7. package/dist/bluesky-sharing-B86jF6P2.mjs.map +1 -0
  8. package/dist/{copy-DpM3ttP6.mjs → copy-Dv_Mr41S.mjs} +3 -3
  9. package/dist/copy-Dv_Mr41S.mjs.map +1 -0
  10. package/dist/{deleted-feed-item-Dpgdv7Am.mjs → deleted-feed-item-DwgIr7vo.mjs} +9 -9
  11. package/dist/deleted-feed-item-DwgIr7vo.mjs.map +1 -0
  12. package/dist/edit-profile-BJDgAblO.mjs +3810 -0
  13. package/dist/edit-profile-BJDgAblO.mjs.map +1 -0
  14. package/dist/{feed-CUigsjj5.mjs → feed-Dg6CeeCP.mjs} +12 -12
  15. package/dist/feed-Dg6CeeCP.mjs.map +1 -0
  16. package/dist/{hash-cJ8IUw77.mjs → hash-CSsTpjMi.mjs} +3 -3
  17. package/dist/hash-CSsTpjMi.mjs.map +1 -0
  18. package/dist/{inbox-gnZvtbNZ.mjs → inbox-DexTffBg.mjs} +3 -3
  19. package/dist/inbox-DexTffBg.mjs.map +1 -0
  20. package/dist/{index-DBDE7Pwv.mjs → index-BCgaO9tm.mjs} +2 -2
  21. package/dist/index-BCgaO9tm.mjs.map +1 -0
  22. package/dist/{index-BHjT-eBh.mjs → index-BgIuNjJ4.mjs} +21 -21
  23. package/dist/index-BgIuNjJ4.mjs.map +1 -0
  24. package/dist/{index-VTkGUYnZ.mjs → index-C5SK4d-U.mjs} +93 -93
  25. package/dist/index-C5SK4d-U.mjs.map +1 -0
  26. package/dist/{index-DRdHe0Xx.mjs → index-D0zVs-Le.mjs} +8 -8
  27. package/dist/index-D0zVs-Le.mjs.map +1 -0
  28. package/dist/{index-DJ5p5ESW.mjs → index-DHVdVxus.mjs} +13567 -12741
  29. package/dist/index-DHVdVxus.mjs.map +1 -0
  30. package/dist/{index-Dc5IUcEt.mjs → index-DunzATiq.mjs} +49 -49
  31. package/dist/index-DunzATiq.mjs.map +1 -0
  32. package/dist/{index-BC1Q-I5Z.mjs → index-Kd9Hi0Fn.mjs} +26 -26
  33. package/dist/index-Kd9Hi0Fn.mjs.map +1 -0
  34. package/dist/{index-DOW1_Ph3.mjs → index-Vj6Uo60G.mjs} +56 -56
  35. package/dist/index-Vj6Uo60G.mjs.map +1 -0
  36. package/dist/{moderation-CF26LtsR.mjs → moderation-DltWXOVa.mjs} +7 -7
  37. package/dist/moderation-DltWXOVa.mjs.map +1 -0
  38. package/dist/{note-C7a3fpfu.mjs → note-m0fl222x.mjs} +6 -6
  39. package/dist/note-m0fl222x.mjs.map +1 -0
  40. package/dist/{reply-DNHDDszZ.mjs → reply-BwjYYb5Y.mjs} +3 -3
  41. package/dist/reply-BwjYYb5Y.mjs.map +1 -0
  42. package/dist/separator-CdEv3ahM.mjs +39 -0
  43. package/dist/separator-CdEv3ahM.mjs.map +1 -0
  44. package/dist/{settings-CK06at6A.mjs → settings-BdWI832x.mjs} +3 -3
  45. package/dist/settings-BdWI832x.mjs.map +1 -0
  46. package/dist/{step-1-CWOu7-_P.mjs → step-1-xd_G9AFI.mjs} +8 -8
  47. package/dist/{step-1-CWOu7-_P.mjs.map → step-1-xd_G9AFI.mjs.map} +1 -1
  48. package/dist/{step-2-Dcy43H6c.mjs → step-2-C-T0bLP6.mjs} +14 -14
  49. package/dist/step-2-C-T0bLP6.mjs.map +1 -0
  50. package/dist/{step-3-Dav_Yy5B.mjs → step-3-Cxv0ahQZ.mjs} +15 -15
  51. package/dist/step-3-Cxv0ahQZ.mjs.map +1 -0
  52. package/dist/{tabs-B7coKvuk.mjs → tabs-BDqPEpa2.mjs} +224 -226
  53. package/dist/tabs-BDqPEpa2.mjs.map +1 -0
  54. package/dist/{topic-filter-BIhCARLH.mjs → topic-filter-C1NL6HYi.mjs} +4 -4
  55. package/dist/topic-filter-C1NL6HYi.mjs.map +1 -0
  56. package/package.json +26 -11
  57. package/dist/at-sign-HA7s9_yo.mjs.map +0 -1
  58. package/dist/avatar-flipboard-swo-37SU.mjs.map +0 -1
  59. package/dist/bluesky-sharing-CLCMkEbr.mjs.map +0 -1
  60. package/dist/copy-DpM3ttP6.mjs.map +0 -1
  61. package/dist/deleted-feed-item-Dpgdv7Am.mjs.map +0 -1
  62. package/dist/edit-profile-C4Z2TwUh.mjs +0 -3741
  63. package/dist/edit-profile-C4Z2TwUh.mjs.map +0 -1
  64. package/dist/feed-CUigsjj5.mjs.map +0 -1
  65. package/dist/hash-cJ8IUw77.mjs.map +0 -1
  66. package/dist/inbox-gnZvtbNZ.mjs.map +0 -1
  67. package/dist/index-BC1Q-I5Z.mjs.map +0 -1
  68. package/dist/index-BHjT-eBh.mjs.map +0 -1
  69. package/dist/index-DBDE7Pwv.mjs.map +0 -1
  70. package/dist/index-DJ5p5ESW.mjs.map +0 -1
  71. package/dist/index-DOW1_Ph3.mjs.map +0 -1
  72. package/dist/index-DRdHe0Xx.mjs.map +0 -1
  73. package/dist/index-Dc5IUcEt.mjs.map +0 -1
  74. package/dist/index-VTkGUYnZ.mjs.map +0 -1
  75. package/dist/moderation-CF26LtsR.mjs.map +0 -1
  76. package/dist/note-C7a3fpfu.mjs.map +0 -1
  77. package/dist/reply-DNHDDszZ.mjs.map +0 -1
  78. package/dist/separator-D4W12X08.mjs +0 -116
  79. package/dist/separator-D4W12X08.mjs.map +0 -1
  80. package/dist/settings-CK06at6A.mjs.map +0 -1
  81. package/dist/step-2-Dcy43H6c.mjs.map +0 -1
  82. package/dist/step-3-Dav_Yy5B.mjs.map +0 -1
  83. package/dist/tabs-B7coKvuk.mjs.map +0 -1
  84. package/dist/topic-filter-BIhCARLH.mjs.map +0 -1
@@ -1,11 +1,11 @@
1
- import { a6 as de, Q as X, c as y, e as C, d as z, j as e, N as O, J as _, b7 as Me, g as Be, R as Pe, P as De, M as Te, A as ce, B as u, aa as xe, h as Ie, k as Z, aP as Fe, F as he, b as v, W as Ae, Z as me, b8 as Re, _ as fe, $ as G, a0 as W, a1 as q, H as K, b9 as $e, ba as Ee, a2 as J, a3 as pe, O as B, bb as He, bc as Le, bd as Se, be as oe, a4 as ze, a5 as Oe, u as je, bf as _e, a as Ve, aE as Qe, x as Ye, y as Ge, z as We, G as qe, L as ae, E as Ke, f as Je, S as E, bg as Xe, D as Ze, m as es, n as ss, o as ls, p as rs, I as ns, Y as os, bh as as, ab as te, ac as ts, ad as is, bi as Q, K as ds, aw as cs, ax as xs, bj as hs, bk as be, bl as ms } from "./index-DJ5p5ESW.mjs";
2
- import { S as ue } from "./separator-D4W12X08.mjs";
3
- import { E as fs } from "./edit-profile-C4Z2TwUh.mjs";
4
- import { T as ps, a as js, b as L, d as Y, c as S } from "./tabs-B7coKvuk.mjs";
5
- import { S as bs } from "./settings-CK06at6A.mjs";
6
- import { C as us } from "./copy-DpM3ttP6.mjs";
1
+ import { a6 as de, Q as X, c as y, e as C, d as z, j as e, N as O, J as _, b4 as Me, g as Be, R as De, P as Pe, M as Te, A as ce, B as u, aa as xe, h as Ie, k as Z, aK as Fe, F as he, b as v, W as Ae, Z as me, b5 as Re, _ as fe, $ as G, a0 as K, a1 as W, H as q, b6 as $e, b7 as Ee, a2 as J, a3 as pe, O as B, b8 as He, b9 as Le, ba as Se, bb as oe, a4 as ze, a5 as Oe, u as be, bc as _e, a as Ve, az as Qe, x as Ye, y as Ge, z as Ke, G as We, L as ae, E as qe, f as Je, S as E, bd as Xe, D as Ze, m as es, n as ss, o as ls, p as rs, I as ns, Y as os, be as as, ab as te, ac as ts, ad as is, bf as Q, K as ds, ax as cs, ay as xs, bg as hs, bh as je, bi as ms } from "./index-DHVdVxus.mjs";
2
+ import { S as ue } from "./separator-CdEv3ahM.mjs";
3
+ import { E as fs } from "./edit-profile-BJDgAblO.mjs";
4
+ import { T as ps, a as bs, b as L, d as Y, c as S } from "./tabs-BDqPEpa2.mjs";
5
+ import { S as js } from "./settings-BdWI832x.mjs";
6
+ import { C as us } from "./copy-Dv_Mr41S.mjs";
7
7
  /**
8
- * @license lucide-react v0.553.0 - ISC
8
+ * @license lucide-react v0.577.0 - ISC
9
9
  *
10
10
  * This source code is licensed under the ISC license.
11
11
  * See the LICENSE file in the root directory of this source tree.
@@ -21,7 +21,7 @@ const gs = [
21
21
  ["path", { d: "m15 5 4 4", key: "1mk7zo" }]
22
22
  ], ks = de("pencil", gs);
23
23
  /**
24
- * @license lucide-react v0.553.0 - ISC
24
+ * @license lucide-react v0.577.0 - ISC
25
25
  *
26
26
  * This source code is licensed under the ISC license.
27
27
  * See the LICENSE file in the root directory of this source tree.
@@ -55,8 +55,8 @@ const ge = ({
55
55
  /* @__PURE__ */ e.jsx(_, { children: /* @__PURE__ */ e.jsx(Me, {}) }),
56
56
  s
57
57
  ] }) : /* @__PURE__ */ e.jsx("div", { className: "flex flex-col", children: n.map(({ actor: l, isFollowing: f, blockedByMe: g, domainBlockedByMe: w }) => {
58
- const b = l.handle || Be(l), N = b === (a == null ? void 0 : a.handle);
59
- return /* @__PURE__ */ e.jsx(Pe.Fragment, { children: /* @__PURE__ */ e.jsx(De, { actor: l, align: "center", isCurrentUser: N, side: "left", children: /* @__PURE__ */ e.jsx("div", { children: /* @__PURE__ */ e.jsxs(
58
+ const j = l.handle || Be(l), N = j === (a == null ? void 0 : a.handle);
59
+ return /* @__PURE__ */ e.jsx(De.Fragment, { children: /* @__PURE__ */ e.jsx(Pe, { actor: l, align: "center", isCurrentUser: N, side: "left", children: /* @__PURE__ */ e.jsx("div", { children: /* @__PURE__ */ e.jsxs(
60
60
  Te,
61
61
  {
62
62
  "data-testid": "actor-item",
@@ -65,9 +65,9 @@ const ge = ({
65
65
  },
66
66
  children: [
67
67
  /* @__PURE__ */ e.jsx(ce, { author: l }),
68
- /* @__PURE__ */ e.jsx("div", { children: /* @__PURE__ */ e.jsxs("div", { className: "text-gray-600 break-anywhere", children: [
68
+ /* @__PURE__ */ e.jsx("div", { children: /* @__PURE__ */ e.jsxs("div", { className: "break-anywhere text-gray-600", children: [
69
69
  /* @__PURE__ */ e.jsx("span", { className: "mr-1 line-clamp-1 font-bold text-black dark:text-white", children: ys(l) }),
70
- /* @__PURE__ */ e.jsx("div", { className: "line-clamp-1 text-sm", children: b })
70
+ /* @__PURE__ */ e.jsx("div", { className: "line-clamp-1 text-sm", children: j })
71
71
  ] }) }),
72
72
  g || w ? /* @__PURE__ */ e.jsx(u, { className: "pointer-events-none ml-auto min-w-[90px]", variant: "destructive", children: "Blocked" }) : N ? null : /* @__PURE__ */ e.jsx(
73
73
  xe,
@@ -75,7 +75,7 @@ const ge = ({
75
75
  className: "ml-auto",
76
76
  "data-testid": "follow-button",
77
77
  following: f,
78
- handle: b,
78
+ handle: j,
79
79
  type: "secondary"
80
80
  }
81
81
  )
@@ -213,7 +213,7 @@ const ge = ({
213
213
  userUnblocked: !1,
214
214
  domainUnblocked: !1
215
215
  };
216
- }), g = a !== void 0, w = g ? a : i, [b, N] = v(!1), P = Ae(() => {
216
+ }), g = a !== void 0, w = g ? a : i, [j, N] = v(!1), D = Ae(() => {
217
217
  const p = n && r, U = n && !r, R = !n && r;
218
218
  let k = "idle";
219
219
  p ? k = "dual" : U ? k = "userOnly" : R && (k = "domainOnly"), f((M) => ({
@@ -224,8 +224,8 @@ const ge = ({
224
224
  }));
225
225
  }, [n, r]);
226
226
  C(() => {
227
- w && !b ? (P(), N(!0)) : w || N(!1);
228
- }, [w, b, P]);
227
+ w && !j ? (D(), N(!0)) : w || N(!1);
228
+ }, [w, j, D]);
229
229
  const F = () => {
230
230
  g ? o == null || o(!0) : x(!0);
231
231
  }, m = (p) => {
@@ -235,18 +235,18 @@ const ge = ({
235
235
  ...p,
236
236
  userUnblocked: !0
237
237
  })), (l.mode !== "dual" || l.domainUnblocked) && (m(!1), t == null || t()), B.success("User unblocked");
238
- }, D = async () => {
238
+ }, P = async () => {
239
239
  await h(), f((p) => ({
240
240
  ...p,
241
241
  domainUnblocked: !0
242
242
  })), (l.mode !== "dual" || l.userUnblocked) && (m(!1), t == null || t()), B.success("Domain unblocked");
243
243
  }, A = s.split("@").filter(Boolean)[1], T = () => /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
244
244
  /* @__PURE__ */ e.jsxs(G, { children: [
245
- /* @__PURE__ */ e.jsx(W, { className: "mb-1 flex flex-col gap-1", children: "Unblock" }),
246
- /* @__PURE__ */ e.jsx(q, { className: "mt-4!", asChild: !0, children: /* @__PURE__ */ e.jsxs("div", { className: "flex flex-col rounded-md border", children: [
245
+ /* @__PURE__ */ e.jsx(K, { className: "mb-1 flex flex-col gap-1", children: "Unblock" }),
246
+ /* @__PURE__ */ e.jsx(W, { className: "mt-4!", asChild: !0, children: /* @__PURE__ */ e.jsxs("div", { className: "flex flex-col rounded-md border", children: [
247
247
  /* @__PURE__ */ e.jsxs("div", { className: "flex justify-between gap-6 p-5", children: [
248
248
  /* @__PURE__ */ e.jsxs("div", { className: "flex flex-col gap-1", children: [
249
- /* @__PURE__ */ e.jsx(K, { children: "Unblock user" }),
249
+ /* @__PURE__ */ e.jsx(q, { children: "Unblock user" }),
250
250
  /* @__PURE__ */ e.jsxs("p", { children: [
251
251
  /* @__PURE__ */ e.jsx("span", { className: "font-semibold text-black", children: s }),
252
252
  " will be able to follow you and engage with your public posts."
@@ -260,14 +260,14 @@ const ge = ({
260
260
  /* @__PURE__ */ e.jsx("div", { className: "border-t" }),
261
261
  /* @__PURE__ */ e.jsxs("div", { className: "flex justify-between gap-6 p-5", children: [
262
262
  /* @__PURE__ */ e.jsxs("div", { className: "flex flex-col gap-1", children: [
263
- /* @__PURE__ */ e.jsx(K, { children: "Unblock domain" }),
263
+ /* @__PURE__ */ e.jsx(q, { children: "Unblock domain" }),
264
264
  /* @__PURE__ */ e.jsxs("p", { children: [
265
265
  "Users from ",
266
266
  /* @__PURE__ */ e.jsx("span", { className: "font-semibold text-black", children: A }),
267
267
  " will be able to follow you and engage with your public posts."
268
268
  ] })
269
269
  ] }),
270
- /* @__PURE__ */ e.jsxs(u, { className: `gap-1 ${l.domainUnblocked ? "pointer-events-none border-green bg-green text-white hover:bg-green hover:text-white" : "text-red hover:text-red-400"}`, variant: "outline", onClick: D, children: [
270
+ /* @__PURE__ */ e.jsxs(u, { className: `gap-1 ${l.domainUnblocked ? "pointer-events-none border-green bg-green text-white hover:bg-green hover:text-white" : "text-red hover:text-red-400"}`, variant: "outline", onClick: P, children: [
271
271
  /* @__PURE__ */ e.jsx(Ee, {}),
272
272
  l.domainUnblocked ? "Domain unblocked" : "Unblock domain"
273
273
  ] })
@@ -279,8 +279,8 @@ const ge = ({
279
279
  const p = l.mode === "userOnly";
280
280
  return /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
281
281
  /* @__PURE__ */ e.jsxs(G, { children: [
282
- /* @__PURE__ */ e.jsx(W, { className: "mb-1 flex flex-col gap-1", children: p ? "Unblock this user?" : "Unblock this domain?" }),
283
- /* @__PURE__ */ e.jsx(q, { children: p ? /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
282
+ /* @__PURE__ */ e.jsx(K, { className: "mb-1 flex flex-col gap-1", children: p ? "Unblock this user?" : "Unblock this domain?" }),
283
+ /* @__PURE__ */ e.jsx(W, { children: p ? /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
284
284
  /* @__PURE__ */ e.jsx("span", { className: "font-semibold text-black", children: s }),
285
285
  " will be able to follow you and engage with your public posts."
286
286
  ] }) : /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
@@ -291,7 +291,7 @@ const ge = ({
291
291
  ] }),
292
292
  /* @__PURE__ */ e.jsxs(J, { children: [
293
293
  /* @__PURE__ */ e.jsx(pe, { children: "Cancel" }),
294
- /* @__PURE__ */ e.jsx(u, { onClick: p ? H : D, children: "Unblock" })
294
+ /* @__PURE__ */ e.jsx(u, { onClick: p ? H : P, children: "Unblock" })
295
295
  ] })
296
296
  ] });
297
297
  };
@@ -315,11 +315,11 @@ const ge = ({
315
315
  m.stopPropagation(), d();
316
316
  }, w = (m) => {
317
317
  m.stopPropagation(), h();
318
- }, b = s == null ? void 0 : s.handle, N = b == null ? void 0 : b.split("@").filter(Boolean)[1], P = () => /* @__PURE__ */ e.jsx(me, { open: x, onOpenChange: l, children: /* @__PURE__ */ e.jsxs(fe, { onClick: (m) => m.stopPropagation(), children: [
318
+ }, j = s == null ? void 0 : s.handle, N = j == null ? void 0 : j.split("@").filter(Boolean)[1], D = () => /* @__PURE__ */ e.jsx(me, { open: x, onOpenChange: l, children: /* @__PURE__ */ e.jsxs(fe, { onClick: (m) => m.stopPropagation(), children: [
319
319
  /* @__PURE__ */ e.jsxs(G, { children: [
320
- /* @__PURE__ */ e.jsx(W, { className: "mb-1 flex flex-col gap-1", children: o === "user" ? "Block this user?" : "Block this domain?" }),
321
- /* @__PURE__ */ e.jsx(q, { children: o === "user" ? /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
322
- /* @__PURE__ */ e.jsx("span", { className: "font-semibold text-black", children: b }),
320
+ /* @__PURE__ */ e.jsx(K, { className: "mb-1 flex flex-col gap-1", children: o === "user" ? "Block this user?" : "Block this domain?" }),
321
+ /* @__PURE__ */ e.jsx(W, { children: o === "user" ? /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
322
+ /* @__PURE__ */ e.jsx("span", { className: "font-semibold text-black", children: j }),
323
323
  " will be able to see your public posts, but will no longer be able follow you or interact with your content on the social web."
324
324
  ] }) : /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
325
325
  "All users from ",
@@ -328,7 +328,7 @@ const ge = ({
328
328
  ] }) })
329
329
  ] }),
330
330
  /* @__PURE__ */ e.jsxs(J, { children: [
331
- o !== "domain" && /* @__PURE__ */ e.jsx(u, { className: "-ml-3 mr-auto hover:bg-transparent hover:opacity-80", variant: "ghost", onClick: (m) => {
331
+ o !== "domain" && /* @__PURE__ */ e.jsx(u, { className: "mr-auto -ml-3 hover:bg-transparent hover:opacity-80", variant: "ghost", onClick: (m) => {
332
332
  m.stopPropagation(), i("domain");
333
333
  }, children: "Block domain instead" }),
334
334
  /* @__PURE__ */ e.jsx(pe, { onClick: (m) => m.stopPropagation(), children: "Cancel" }),
@@ -363,7 +363,7 @@ const ge = ({
363
363
  }, children: t ? "Unblock user" : a ? "Unblock domain" : "Block user" }) })
364
364
  ] }) })
365
365
  ] }),
366
- t || a ? F() : P()
366
+ t || a ? F() : D()
367
367
  ] });
368
368
  }, Ms = ({
369
369
  account: s,
@@ -402,17 +402,17 @@ const ge = ({
402
402
  followingTab: c,
403
403
  followersTab: t
404
404
  }) => {
405
- const a = je(), o = _e(), i = z(), { canGoBack: x } = Ve(), l = a.handle ? `/profile/${a.handle}` : "/profile", f = !a.handle, g = a.handle ? a.tab || "" : o.pathname.split("/").pop() || "", w = Qe(() => f ? ["likes", "following", "followers"] : ["following", "followers"], [f]), b = w.includes(g) ? g : "posts", N = Ye("index"), P = Ge("index"), F = We("index"), m = qe("index"), H = X("index", "me"), { data: D } = a.handle ? H : { data: void 0 }, A = a.handle === (D == null ? void 0 : D.handle) || !a.handle, T = s == null ? void 0 : s.blockedByMe, I = s == null ? void 0 : s.domainBlockedByMe, [p, U] = v(!1), [R, k] = v(!1), M = y(null);
405
+ const a = be(), o = _e(), i = z(), { canGoBack: x } = Ve(), l = a.handle ? `/profile/${a.handle}` : "/profile", f = !a.handle, g = a.handle ? a.tab || "" : o.pathname.split("/").pop() || "", w = Qe(() => f ? ["likes", "following", "followers"] : ["following", "followers"], [f]), j = w.includes(g) ? g : "posts", N = Ye("index"), D = Ge("index"), F = Ke("index"), m = We("index"), H = X("index", "me"), { data: P } = a.handle ? H : { data: void 0 }, A = a.handle === (P == null ? void 0 : P.handle) || !a.handle, T = s == null ? void 0 : s.blockedByMe, I = s == null ? void 0 : s.domainBlockedByMe, [p, U] = v(!1), [R, k] = v(!1), M = y(null);
406
406
  C(() => () => {
407
407
  M.current && window.clearTimeout(M.current);
408
408
  }, []);
409
409
  const ee = () => {
410
- T ? P.mutate(s) : (N.mutate(s), B.success("User blocked")), U(!1);
410
+ T ? D.mutate(s) : (N.mutate(s), B.success("User blocked")), U(!1);
411
411
  }, se = () => {
412
412
  I ? m.mutate({ url: s.apId, handle: s.handle }) : (F.mutate({ url: s.apId, handle: s.handle }), B.success("Domain blocked")), U(!1);
413
413
  }, le = async () => {
414
- var j;
415
- if (!(s != null && s.handle) || !((j = navigator == null ? void 0 : navigator.clipboard) != null && j.writeText)) {
414
+ var b;
415
+ if (!(s != null && s.handle) || !((b = navigator == null ? void 0 : navigator.clipboard) != null && b.writeText)) {
416
416
  B.error("Unable to copy handle");
417
417
  return;
418
418
  }
@@ -429,10 +429,10 @@ const ge = ({
429
429
  }, [$, s == null ? void 0 : s.bio, n, r]), C(() => {
430
430
  g && (w.includes(g) || i(l, { replace: !0 }));
431
431
  }, [w, l, i, g]);
432
- const Ce = (j) => j === "posts" ? l : `${l}/${j}`, Ue = (j) => {
433
- j !== b && i(Ce(j), { replace: !0 });
432
+ const Ce = (b) => b === "posts" ? l : `${l}/${b}`, Ue = (b) => {
433
+ b !== j && i(Ce(b), { replace: !0 });
434
434
  };
435
- return !r && !s ? /* @__PURE__ */ e.jsx(ae, { children: /* @__PURE__ */ e.jsx("div", { className: "mx-auto mt-4 flex w-full max-w-[620px] flex-col items-center [&_svg]:translate-x-px", children: /* @__PURE__ */ e.jsxs(Ke, { children: [
435
+ return !r && !s ? /* @__PURE__ */ e.jsx(ae, { children: /* @__PURE__ */ e.jsx("div", { className: "mx-auto mt-4 flex w-full max-w-[620px] flex-col items-center [&_svg]:translate-x-px", children: /* @__PURE__ */ e.jsxs(qe, { children: [
436
436
  /* @__PURE__ */ e.jsx(Je, { children: /* @__PURE__ */ e.jsx(vs, {}) }),
437
437
  /* @__PURE__ */ e.jsx("div", { children: "Profile not found" })
438
438
  ] }) }) }) : /* @__PURE__ */ e.jsx(ae, { children: /* @__PURE__ */ e.jsx("div", { className: "z-0 mx-[max(-4vw,-32px)] -mt-9 flex flex-col items-center pb-16", children: /* @__PURE__ */ e.jsx("div", { className: "mx-auto w-full", children: /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
@@ -492,27 +492,27 @@ const ge = ({
492
492
  )
493
493
  ] }),
494
494
  A && !r && /* @__PURE__ */ e.jsxs(Ze, { open: ve, onOpenChange: re, children: [
495
- /* @__PURE__ */ e.jsx(es, { children: /* @__PURE__ */ e.jsx(bs, { children: /* @__PURE__ */ e.jsx(u, { variant: "secondary", children: "Edit profile" }) }) }),
496
- /* @__PURE__ */ e.jsxs(ss, { className: "w-full max-w-[520px]", onOpenAutoFocus: (j) => j.preventDefault(), children: [
495
+ /* @__PURE__ */ e.jsx(es, { children: /* @__PURE__ */ e.jsx(js, { children: /* @__PURE__ */ e.jsx(u, { variant: "secondary", children: "Edit profile" }) }) }),
496
+ /* @__PURE__ */ e.jsxs(ss, { className: "w-full max-w-[520px]", onOpenAutoFocus: (b) => b.preventDefault(), children: [
497
497
  /* @__PURE__ */ e.jsx(ls, { children: /* @__PURE__ */ e.jsx(rs, { children: "Profile settings" }) }),
498
498
  s && /* @__PURE__ */ e.jsx(fs, { account: s, setIsEditingProfile: re })
499
499
  ] })
500
500
  ] })
501
501
  ] }),
502
- /* @__PURE__ */ e.jsx(ns, { className: "mt-4 truncate break-anywhere", children: r ? /* @__PURE__ */ e.jsx(E, { className: "w-32" }) : s == null ? void 0 : s.name }),
502
+ /* @__PURE__ */ e.jsx(ns, { className: "break-anywhere mt-4 truncate", children: r ? /* @__PURE__ */ e.jsx(E, { className: "w-32" }) : s == null ? void 0 : s.name }),
503
503
  /* @__PURE__ */ e.jsxs("div", { className: "mb-4 flex items-center gap-2", children: [
504
504
  /* @__PURE__ */ e.jsx("a", { className: "inline-flex max-w-full truncate text-[1.5rem] text-gray-800 hover:text-gray-900 dark:text-gray-600 dark:hover:text-gray-500", href: s == null ? void 0 : s.url, rel: "noopener noreferrer", target: "_blank", children: /* @__PURE__ */ e.jsx("span", { className: "truncate", children: r ? /* @__PURE__ */ e.jsx(E, { className: "w-full max-w-56" }) : s == null ? void 0 : s.handle }) }),
505
505
  !r && /* @__PURE__ */ e.jsx(u, { className: "-ml-1.5 size-6 p-0 text-gray-800 hover:text-gray-900 dark:text-gray-700 dark:hover:text-gray-600", title: "Copy handle", variant: "link", onClick: le, children: R ? /* @__PURE__ */ e.jsx(os, { size: 16 }) : /* @__PURE__ */ e.jsx(us, { size: 16 }) }),
506
506
  (s == null ? void 0 : s.followsMe) && !r && /* @__PURE__ */ e.jsx(as, { className: "mt-px whitespace-nowrap", variant: "secondary", children: "Follows you" })
507
507
  ] }),
508
- ((s == null ? void 0 : s.bio) || (n == null ? void 0 : n.length) > 0) && /* @__PURE__ */ e.jsxs("div", { ref: V, className: `ap-profile-content relative text-[1.5rem] break-anywhere [&>p]:mb-3 ${$ ? "max-h-none pb-7" : "max-h-[160px] overflow-hidden"} relative`, children: [
508
+ ((s == null ? void 0 : s.bio) || (n == null ? void 0 : n.length) > 0) && /* @__PURE__ */ e.jsxs("div", { ref: V, className: `ap-profile-content break-anywhere relative text-[1.5rem] [&>p]:mb-3 ${$ ? "max-h-none pb-7" : "max-h-[160px] overflow-hidden"} relative`, children: [
509
509
  r ? /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
510
510
  /* @__PURE__ */ e.jsx(E, {}),
511
511
  /* @__PURE__ */ e.jsx(E, { className: "w-full max-w-48" })
512
512
  ] }) : /* @__PURE__ */ e.jsx("div", { dangerouslySetInnerHTML: { __html: te(ts(is((s == null ? void 0 : s.bio) ?? "", ["a", "br"]))) } }),
513
- n == null ? void 0 : n.map((j) => /* @__PURE__ */ e.jsxs("span", { className: "mt-3 line-clamp-1 flex flex-col text-[1.5rem]", children: [
514
- /* @__PURE__ */ e.jsx("span", { className: "text-xs font-semibold", children: j.name }),
515
- /* @__PURE__ */ e.jsx("span", { dangerouslySetInnerHTML: { __html: te(j.value) }, className: "ap-profile-content truncate" })
513
+ n == null ? void 0 : n.map((b) => /* @__PURE__ */ e.jsxs("span", { className: "mt-3 line-clamp-1 flex flex-col text-[1.5rem]", children: [
514
+ /* @__PURE__ */ e.jsx("span", { className: "text-xs font-semibold", children: b.name }),
515
+ /* @__PURE__ */ e.jsx("span", { dangerouslySetInnerHTML: { __html: te(b.value) }, className: "ap-profile-content truncate" })
516
516
  ] })),
517
517
  !$ && ne && /* @__PURE__ */ e.jsx("div", { className: "absolute inset-x-0 bottom-0 h-16 bg-gradient-to-t from-white via-white/100 via-60% to-transparent dark:from-black dark:via-black/100" }),
518
518
  ne && /* @__PURE__ */ e.jsx(
@@ -529,11 +529,11 @@ const ge = ({
529
529
  ps,
530
530
  {
531
531
  className: "mt-5",
532
- value: b,
532
+ value: j,
533
533
  variant: "underline",
534
- onValueChange: (j) => Ue(j),
534
+ onValueChange: (b) => Ue(b),
535
535
  children: [
536
- /* @__PURE__ */ e.jsxs(js, { children: [
536
+ /* @__PURE__ */ e.jsxs(bs, { children: [
537
537
  /* @__PURE__ */ e.jsx(L, { value: "posts", children: "Posts" }),
538
538
  f && /* @__PURE__ */ e.jsxs(L, { value: "likes", children: [
539
539
  "Likes",
@@ -551,7 +551,7 @@ const ge = ({
551
551
  /* @__PURE__ */ e.jsx(S, { value: "posts", children: (T || I) && !p ? /* @__PURE__ */ e.jsxs(O, { children: [
552
552
  /* @__PURE__ */ e.jsx(_, { children: /* @__PURE__ */ e.jsx(ds, {}) }),
553
553
  /* @__PURE__ */ e.jsxs("div", { className: "mt-2 flex flex-col items-center gap-0.5", children: [
554
- /* @__PURE__ */ e.jsxs(K, { children: [
554
+ /* @__PURE__ */ e.jsxs(q, { children: [
555
555
  s.name,
556
556
  " is blocked"
557
557
  ] }),
@@ -568,7 +568,7 @@ const ge = ({
568
568
  )
569
569
  ] })
570
570
  ] }) }) }) });
571
- }, Ps = ({ handle: s }) => {
571
+ }, Ds = ({ handle: s }) => {
572
572
  const { postsByAccountQuery: n } = hs(s || "me", { enabled: !0 }), {
573
573
  data: r,
574
574
  fetchNextPage: d,
@@ -587,7 +587,7 @@ const ge = ({
587
587
  posts: a
588
588
  }
589
589
  );
590
- }, Ds = () => {
590
+ }, Ps = () => {
591
591
  const { postsLikedByAccountQuery: s } = ms({ enabled: !0 }), { data: n, fetchNextPage: r, hasNextPage: d, isFetchingNextPage: h, isLoading: c } = s, t = (n == null ? void 0 : n.pages.flatMap((a) => a.posts)) ?? Array.from({ length: 5 }, (a, o) => ({ id: `placeholder-${o}`, object: {} }));
592
592
  return /* @__PURE__ */ e.jsx(
593
593
  Ns,
@@ -600,7 +600,7 @@ const ge = ({
600
600
  }
601
601
  );
602
602
  }, Ts = ({ handle: s }) => {
603
- const n = be(s === "" ? "me" : s, "following"), {
603
+ const n = je(s === "" ? "me" : s, "following"), {
604
604
  data: r,
605
605
  fetchNextPage: d,
606
606
  hasNextPage: h,
@@ -631,7 +631,7 @@ const ge = ({
631
631
  }
632
632
  );
633
633
  }, Is = ({ handle: s }) => {
634
- const n = be(s === "" ? "me" : s, "followers"), {
634
+ const n = je(s === "" ? "me" : s, "followers"), {
635
635
  data: r,
636
636
  fetchNextPage: d,
637
637
  hasNextPage: h,
@@ -660,7 +660,7 @@ const ge = ({
660
660
  }
661
661
  );
662
662
  }, Ls = ({}) => {
663
- const s = je(), { data: n, isLoading: r, error: d, refetch: h } = X("index", s.handle || "me");
663
+ const s = be(), { data: n, isLoading: r, error: d, refetch: h } = X("index", s.handle || "me");
664
664
  if (C(() => {
665
665
  h();
666
666
  }, [s.handle, h]), d && cs(d) && d.statusCode !== 404)
@@ -668,7 +668,7 @@ const ge = ({
668
668
  const c = Object.keys((n == null ? void 0 : n.customFields) || {}).map((x) => ({
669
669
  name: x,
670
670
  value: n.customFields[x]
671
- })) || [], t = /* @__PURE__ */ e.jsx(Ps, { handle: s.handle || "" }), a = /* @__PURE__ */ e.jsx(Ds, {}), o = /* @__PURE__ */ e.jsx(Ts, { handle: s.handle || "" }), i = /* @__PURE__ */ e.jsx(Is, { handle: s.handle || "" });
671
+ })) || [], t = /* @__PURE__ */ e.jsx(Ds, { handle: s.handle || "" }), a = /* @__PURE__ */ e.jsx(Ps, {}), o = /* @__PURE__ */ e.jsx(Ts, { handle: s.handle || "" }), i = /* @__PURE__ */ e.jsx(Is, { handle: s.handle || "" });
672
672
  return /* @__PURE__ */ e.jsx(
673
673
  Bs,
674
674
  {
@@ -685,4 +685,4 @@ const ge = ({
685
685
  export {
686
686
  Ls as default
687
687
  };
688
- //# sourceMappingURL=index-DOW1_Ph3.mjs.map
688
+ //# sourceMappingURL=index-Vj6Uo60G.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-Vj6Uo60G.mjs","sources":["../../../node_modules/.pnpm/lucide-react@0.577.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/pencil.js","../../../node_modules/.pnpm/lucide-react@0.577.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/user-round-x.js","../src/utils/get-name.ts","../src/views/profile/components/actor-list.tsx","../src/views/profile/components/likes.tsx","../src/views/profile/components/posts.tsx","../src/views/profile/components/unblock-dialog.tsx","../src/views/profile/components/profile-menu.tsx","../src/views/profile/components/unblock-button.tsx","../src/views/profile/components/profile-page.tsx","../src/views/profile/profile.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\",\n key: \"1a8usu\"\n }\n ],\n [\"path\", { d: \"m15 5 4 4\", key: \"1mk7zo\" }]\n];\nconst Pencil = createLucideIcon(\"pencil\", __iconNode);\n\nexport { __iconNode, Pencil as default };\n//# sourceMappingURL=pencil.js.map\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M2 21a8 8 0 0 1 11.873-7\", key: \"74fkxq\" }],\n [\"circle\", { cx: \"10\", cy: \"8\", r: \"5\", key: \"o932ke\" }],\n [\"path\", { d: \"m17 17 5 5\", key: \"p7ous7\" }],\n [\"path\", { d: \"m22 17-5 5\", key: \"gqnmv0\" }]\n];\nconst UserRoundX = createLucideIcon(\"user-round-x\", __iconNode);\n\nexport { __iconNode, UserRoundX as default };\n//# sourceMappingURL=user-round-x.js.map\n","export default function getName(actor: {name: unknown, preferredUsername: unknown}): string {\n if (typeof actor.name === 'string') {\n return actor.name;\n }\n if (typeof actor.preferredUsername === 'string') {\n return actor.preferredUsername;\n }\n if (typeof actor.preferredUsername === 'object' && actor.preferredUsername !== null) {\n if ('@value' in actor.preferredUsername) {\n if (typeof actor.preferredUsername['@value'] === 'string') {\n return actor.preferredUsername['@value'];\n }\n }\n }\n return 'Unknown';\n}\n","import APAvatar from '@src/components/global/ap-avatar';\nimport ActivityItem from '@src/components/activities/activity-item';\nimport FollowButton from '@src/components/global/follow-button';\nimport ProfilePreviewHoverCard from '@components/global/profile-preview-hover-card';\nimport React, {useEffect, useRef} from 'react';\nimport getName from '@src/utils/get-name';\nimport getUsername from '@src/utils/get-username';\nimport {Actor} from '@src/api/activitypub';\nimport {Button, LoadingIndicator, NoValueLabel, NoValueLabelIcon} from '@tryghost/shade/components';\nimport {LucideIcon} from '@tryghost/shade/utils';\nimport {handleProfileClick} from '@src/utils/handle-profile-click';\nimport {useAccountForUser} from '@src/hooks/use-activity-pub-queries';\nimport {useNavigateWithBasePath} from '@src/hooks/use-navigate-with-base-path';\n\ntype ActorListProps = {\n noResultsMessage: string,\n actors: Actor[],\n isLoading: boolean,\n fetchNextPage: () => void,\n hasNextPage: boolean,\n isFetchingNextPage: boolean\n};\n\nconst ActorList: React.FC<ActorListProps> = ({\n noResultsMessage,\n actors,\n isLoading,\n fetchNextPage,\n hasNextPage,\n isFetchingNextPage\n}) => {\n const currentAccountQuery = useAccountForUser('index', 'me');\n const {data: currentUser} = currentAccountQuery;\n\n const observerRef = useRef<IntersectionObserver | null>(null);\n const loadMoreRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n\n observerRef.current = new IntersectionObserver((entries) => {\n if (entries[0].isIntersecting && hasNextPage && !isFetchingNextPage) {\n fetchNextPage();\n }\n });\n\n if (loadMoreRef.current) {\n observerRef.current.observe(loadMoreRef.current);\n }\n\n return () => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n };\n }, [hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n const navigate = useNavigateWithBasePath();\n\n return (\n <div className='pt-3' data-testid=\"actor-list\">\n {\n hasNextPage === false && actors.length === 0 ? (\n <NoValueLabel>\n <NoValueLabelIcon><LucideIcon.UserRoundPlus /></NoValueLabelIcon>\n {noResultsMessage}\n </NoValueLabel>\n ) : (\n <div className='flex flex-col'>\n {actors.map(({actor, isFollowing, blockedByMe, domainBlockedByMe}) => {\n const actorHandle = actor.handle || getUsername(actor);\n const isCurrentUser = actorHandle === currentUser?.handle;\n\n return (\n <React.Fragment key={actor.id}>\n <ProfilePreviewHoverCard actor={actor} align='center' isCurrentUser={isCurrentUser} side='left'>\n <div>\n <ActivityItem key={actor.id}\n data-testid=\"actor-item\"\n onClick={() => {\n handleProfileClick(actor, navigate);\n }}\n >\n <APAvatar author={actor} />\n <div>\n <div className='break-anywhere text-gray-600'>\n <span className='mr-1 line-clamp-1 font-bold text-black dark:text-white'>{getName(actor)}</span>\n <div className='line-clamp-1 text-sm'>{actorHandle}</div>\n </div>\n </div>\n {blockedByMe || domainBlockedByMe ?\n <Button className='pointer-events-none ml-auto min-w-[90px]' variant='destructive'>Blocked</Button> :\n !isCurrentUser ? (\n <FollowButton\n className='ml-auto'\n data-testid=\"follow-button\"\n following={isFollowing}\n handle={actorHandle}\n type='secondary'\n />\n ) : null\n }\n </ActivityItem>\n </div>\n </ProfilePreviewHoverCard>\n </React.Fragment>\n );\n })}\n </div>\n )\n }\n <div ref={loadMoreRef} className='h-1'></div>\n {\n (isFetchingNextPage || isLoading) && (\n <div className='mt-6 flex flex-col items-center justify-center gap-4 text-center'>\n <LoadingIndicator size='md' />\n </div>\n )\n }\n </div>\n );\n};\n\nexport default ActorList;\n","import FeedItem from '@src/components/feed/feed-item';\nimport {Activity} from '@src/api/activitypub';\nimport {LoadingIndicator, NoValueLabel, NoValueLabelIcon, Separator} from '@tryghost/shade/components';\nimport {LucideIcon} from '@tryghost/shade/utils';\nimport {useEffect, useRef} from 'react';\nimport {useNavigateWithBasePath} from '@src/hooks/use-navigate-with-base-path';\n\nexport type LikesProps = {\n isLoading: boolean,\n posts: Activity[],\n fetchNextPage: () => void,\n hasNextPage: boolean,\n isFetchingNextPage: boolean\n}\n\nconst Likes: React.FC<LikesProps> = ({\n posts,\n fetchNextPage,\n hasNextPage,\n isFetchingNextPage,\n isLoading\n}) => {\n const observerRef = useRef<IntersectionObserver | null>(null);\n const loadMoreRef = useRef<HTMLDivElement | null>(null);\n const endLoadMoreRef = useRef<HTMLDivElement | null>(null);\n\n // Calculate the index at which to place the loadMoreRef - This will place it ~75% through the list\n const loadMoreIndex = Math.max(0, Math.floor(posts.length * 0.75) - 1);\n\n useEffect(() => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n\n observerRef.current = new IntersectionObserver((entries) => {\n if (entries[0].isIntersecting && hasNextPage && !isFetchingNextPage) {\n fetchNextPage();\n }\n });\n\n if (loadMoreRef.current) {\n observerRef.current.observe(loadMoreRef.current);\n }\n if (endLoadMoreRef.current) {\n observerRef.current.observe(endLoadMoreRef.current);\n }\n\n return () => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n };\n }, [hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n const navigate = useNavigateWithBasePath();\n\n return (\n <>\n {hasNextPage === false && posts.length === 0 && (\n <NoValueLabel>\n <NoValueLabelIcon><LucideIcon.Heart /></NoValueLabelIcon>\n You haven&apos;t liked anything yet.\n </NoValueLabel>\n )}\n <ul className='mx-auto flex max-w-[640px] flex-col' data-testid=\"profile-likes-list\">\n {posts.map((activity, index) => (\n <li\n key={`likes-${activity.id}`}\n data-testid=\"profile-like-item\"\n data-test-view-article\n >\n <FeedItem\n actor={activity.actor}\n allowDelete={activity.object.authored}\n commentCount={activity.object.replyCount}\n isLoading={isLoading}\n layout='feed'\n likeCount={activity.object.likeCount}\n object={activity.object}\n repostCount={activity.object.repostCount}\n type={activity.type}\n onClick={() => {\n if (activity.object.type === 'Note') {\n navigate(`/notes/${encodeURIComponent(activity.object.id)}`);\n } else if (activity.object.type === 'Article') {\n navigate(`/reader/${encodeURIComponent(activity.object.id)}`);\n }\n }}\n />\n {index < posts.length - 1 && <Separator />}\n {index === loadMoreIndex && (\n <div ref={loadMoreRef} className='h-1'></div>\n )}\n </li>\n ))}\n {isFetchingNextPage && (\n <li className='flex flex-col items-center justify-center gap-4 text-center'>\n <LoadingIndicator size='md' />\n </li>\n )}\n </ul>\n <div ref={endLoadMoreRef} className='h-1'></div>\n </>\n );\n};\n\nexport default Likes;\n","import FeedItem from '@src/components/feed/feed-item';\nimport {Activity} from '@src/api/activitypub';\nimport {LoadingIndicator, NoValueLabel, NoValueLabelIcon, Separator} from '@tryghost/shade/components';\nimport {LucideIcon} from '@tryghost/shade/utils';\nimport {useEffect, useRef} from 'react';\nimport {useNavigateWithBasePath} from '@src/hooks/use-navigate-with-base-path';\n\nexport type PostsProps = {\n posts: Activity[],\n isLoading: boolean,\n fetchNextPage: () => void,\n hasNextPage: boolean,\n isFetchingNextPage: boolean,\n noResultsMessage: string\n}\n\nconst Posts: React.FC<PostsProps> = ({\n posts,\n fetchNextPage,\n hasNextPage,\n isFetchingNextPage,\n isLoading,\n noResultsMessage\n}) => {\n const observerRef = useRef<IntersectionObserver | null>(null);\n const loadMoreRef = useRef<HTMLDivElement | null>(null);\n const endLoadMoreRef = useRef<HTMLDivElement | null>(null);\n\n // Calculate the index at which to place the loadMoreRef - This will place it ~75% through the list\n const loadMoreIndex = Math.max(0, Math.floor(posts.length * 0.75) - 1);\n\n useEffect(() => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n\n observerRef.current = new IntersectionObserver((entries) => {\n if (entries[0].isIntersecting && hasNextPage && !isFetchingNextPage) {\n fetchNextPage();\n }\n });\n\n if (loadMoreRef.current) {\n observerRef.current.observe(loadMoreRef.current);\n }\n if (endLoadMoreRef.current) {\n observerRef.current.observe(endLoadMoreRef.current);\n }\n\n return () => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n };\n }, [hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n const navigate = useNavigateWithBasePath();\n\n return (\n <>\n {hasNextPage === false && posts.length === 0 && (\n <NoValueLabel>\n <NoValueLabelIcon><LucideIcon.Pencil /></NoValueLabelIcon>\n {noResultsMessage}\n </NoValueLabel>\n )}\n <ul className='mx-auto flex max-w-[640px] flex-col' data-testid=\"profile-posts-list\">\n {posts.map((activity, index) => (\n <li\n key={`posts-${activity.id}`}\n data-testid=\"profile-post-item\"\n data-test-view-article\n >\n <FeedItem\n actor={activity.actor}\n allowDelete={activity.object.authored}\n commentCount={activity.object.replyCount}\n isLoading={isLoading}\n layout='feed'\n likeCount={activity.object.likeCount}\n object={activity.object}\n repostCount={activity.object.repostCount}\n type={activity.type}\n onClick={() => {\n if (activity.object.type === 'Note') {\n navigate(`/notes/${encodeURIComponent(activity.object.id)}`);\n } else if (activity.object.type === 'Article') {\n navigate(`/reader/${encodeURIComponent(activity.object.id)}`);\n }\n }}\n />\n {index < posts.length - 1 && <Separator />}\n {index === loadMoreIndex && (\n <div ref={loadMoreRef} className='h-1'></div>\n )}\n </li>\n ))}\n {isFetchingNextPage && (\n <li className='flex flex-col items-center justify-center gap-4 text-center'>\n <LoadingIndicator size='md' />\n </li>\n )}\n </ul>\n <div ref={endLoadMoreRef} className='h-1'></div>\n </>\n );\n};\n\nexport default Posts;\n","import React, {useCallback, useEffect, useState} from 'react';\nimport {AlertDialog, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, Button} from '@tryghost/shade/components';\nimport {H4} from '@tryghost/shade/primitives';\nimport {LucideIcon} from '@tryghost/shade/utils';\nimport {toast} from 'sonner';\n\ntype DialogMode = 'idle' | 'dual' | 'userOnly' | 'domainOnly';\n\ninterface UnblockDialogProps {\n handle: string;\n isUserBlocked: boolean;\n isDomainBlocked: boolean;\n onUnblockUser: () => Promise<void> | void;\n onUnblockDomain: () => Promise<void> | void;\n trigger?: React.ReactNode;\n onUnblockComplete?: () => void;\n isOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nconst UnblockDialog: React.FC<UnblockDialogProps> = ({\n handle,\n isUserBlocked,\n isDomainBlocked,\n onUnblockUser,\n onUnblockDomain,\n trigger,\n onUnblockComplete,\n isOpen: externalIsOpen,\n onOpenChange: externalOnOpenChange\n}) => {\n const [internalDialogOpen, setInternalDialogOpen] = useState(false);\n const [dialogState, setDialogState] = useState(() => {\n const bothBlocked = isUserBlocked && isDomainBlocked;\n const userOnlyBlocked = isUserBlocked && !isDomainBlocked;\n const domainOnlyBlocked = !isUserBlocked && isDomainBlocked;\n\n let mode: DialogMode = 'idle';\n if (bothBlocked) {\n mode = 'dual';\n } else if (userOnlyBlocked) {\n mode = 'userOnly';\n } else if (domainOnlyBlocked) {\n mode = 'domainOnly';\n }\n\n return {\n mode,\n userUnblocked: false,\n domainUnblocked: false\n };\n });\n\n const isControlled = externalIsOpen !== undefined;\n const dialogOpen = isControlled ? externalIsOpen : internalDialogOpen;\n\n const [wasOpened, setWasOpened] = useState(false);\n\n const initializeDialogState = useCallback(() => {\n const bothBlocked = isUserBlocked && isDomainBlocked;\n const userOnlyBlocked = isUserBlocked && !isDomainBlocked;\n const domainOnlyBlocked = !isUserBlocked && isDomainBlocked;\n\n let mode: DialogMode = 'idle';\n if (bothBlocked) {\n mode = 'dual';\n } else if (userOnlyBlocked) {\n mode = 'userOnly';\n } else if (domainOnlyBlocked) {\n mode = 'domainOnly';\n }\n\n setDialogState(prev => ({\n ...prev,\n mode,\n userUnblocked: false,\n domainUnblocked: false\n }));\n }, [isUserBlocked, isDomainBlocked]);\n\n useEffect(() => {\n if (dialogOpen && !wasOpened) {\n initializeDialogState();\n setWasOpened(true);\n } else if (!dialogOpen) {\n setWasOpened(false);\n }\n }, [dialogOpen, wasOpened, initializeDialogState]);\n\n const handleDialogOpen = () => {\n if (isControlled) {\n externalOnOpenChange?.(true);\n } else {\n setInternalDialogOpen(true);\n }\n };\n\n const handleDialogClose = (open: boolean) => {\n if (!open) {\n if (isControlled) {\n externalOnOpenChange?.(false);\n } else {\n setInternalDialogOpen(false);\n }\n }\n };\n\n const handleUnblock = async () => {\n await onUnblockUser();\n\n setDialogState(prev => ({\n ...prev,\n userUnblocked: true\n }));\n\n if (dialogState.mode !== 'dual' || dialogState.domainUnblocked) {\n handleDialogClose(false);\n onUnblockComplete?.();\n }\n\n toast.success('User unblocked');\n };\n\n const handleDomainUnblock = async () => {\n await onUnblockDomain();\n\n setDialogState(prev => ({\n ...prev,\n domainUnblocked: true\n }));\n\n if (dialogState.mode !== 'dual' || dialogState.userUnblocked) {\n handleDialogClose(false);\n onUnblockComplete?.();\n }\n\n toast.success('Domain unblocked');\n };\n\n const domain = handle.split('@').filter(Boolean)[1];\n\n const renderDualView = () => (\n <>\n <AlertDialogHeader>\n <AlertDialogTitle className='mb-1 flex flex-col gap-1'>\n Unblock\n </AlertDialogTitle>\n <AlertDialogDescription className='mt-4!' asChild>\n <div className='flex flex-col rounded-md border'>\n <div className='flex justify-between gap-6 p-5'>\n <div className='flex flex-col gap-1'>\n <H4>Unblock user</H4>\n <p><span className='font-semibold text-black'>{handle}</span> will be able to follow you and engage with your public posts.</p>\n </div>\n <Button className={`gap-1 ${dialogState.userUnblocked ? 'pointer-events-none border-green bg-green text-white hover:bg-green hover:text-white' : 'text-red hover:text-red-400'}`} variant='outline' onClick={handleUnblock}>\n <LucideIcon.User />\n {dialogState.userUnblocked ? 'User unblocked' : 'Unblock user'}\n </Button>\n </div>\n <div className='border-t' />\n <div className='flex justify-between gap-6 p-5'>\n <div className='flex flex-col gap-1'>\n <H4>Unblock domain</H4>\n <p>Users from <span className='font-semibold text-black'>{domain}</span> will be able to follow you and engage with your public posts.</p>\n </div>\n <Button className={`gap-1 ${dialogState.domainUnblocked ? 'pointer-events-none border-green bg-green text-white hover:bg-green hover:text-white' : 'text-red hover:text-red-400'}`} variant='outline' onClick={handleDomainUnblock}>\n <LucideIcon.Globe />\n {dialogState.domainUnblocked ? 'Domain unblocked' : 'Unblock domain'}\n </Button>\n </div>\n </div>\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <Button onClick={() => handleDialogClose(false)}>OK</Button>\n </AlertDialogFooter>\n </>\n );\n\n const renderSingleView = () => {\n const isUserBlock = dialogState.mode === 'userOnly';\n\n return (\n <>\n <AlertDialogHeader>\n <AlertDialogTitle className='mb-1 flex flex-col gap-1'>\n {isUserBlock ? 'Unblock this user?' : 'Unblock this domain?'}\n </AlertDialogTitle>\n <AlertDialogDescription>\n {isUserBlock\n ? <><span className='font-semibold text-black'>{handle}</span> will be able to follow you and engage with your public posts.</>\n : <>Users from <span className='font-semibold text-black'>{domain}</span> will be able to follow you and engage with your public posts.</>\n }\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <Button onClick={isUserBlock ? handleUnblock : handleDomainUnblock}>\n Unblock\n </Button>\n </AlertDialogFooter>\n </>\n );\n };\n\n return (\n <AlertDialog open={dialogOpen} onOpenChange={handleDialogClose}>\n {trigger && (\n <AlertDialogTrigger asChild onClick={handleDialogOpen}>\n {trigger}\n </AlertDialogTrigger>\n )}\n <AlertDialogContent className={`${dialogState.mode === 'dual' && 'max-w-[600px]'}`}>\n {dialogState.mode === 'dual' ? renderDualView() : renderSingleView()}\n </AlertDialogContent>\n </AlertDialog>\n );\n};\n\nexport default UnblockDialog;\n","import React, {useState} from 'react';\nimport UnblockDialog from './unblock-dialog';\nimport {Account} from '@src/api/activitypub';\nimport {AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, Button, Popover, PopoverClose, PopoverContent, PopoverTrigger, buttonVariants} from '@tryghost/shade/components';\n\ninterface ProfileMenuProps {\n account?: Account,\n children: React.ReactNode;\n onCopyHandle: () => void;\n onBlockAccount: () => void;\n onBlockDomain: () => void;\n disabled?: boolean;\n isBlocked?: boolean;\n isDomainBlocked?: boolean;\n}\n\nconst ProfileMenu: React.FC<ProfileMenuProps> = ({\n account,\n children,\n onCopyHandle,\n onBlockAccount,\n onBlockDomain,\n disabled = false,\n isBlocked = false,\n isDomainBlocked = false\n}) => {\n const [dialogType, setDialogType] = useState<'user' | 'domain' | null>(null);\n const [dialogOpen, setDialogOpen] = useState(false);\n\n const handleCopyHandleClick = (e: React.MouseEvent<HTMLElement>) => {\n e.stopPropagation();\n onCopyHandle();\n };\n\n const handleBlockAccountClick = (e: React.MouseEvent<HTMLElement>) => {\n e.stopPropagation();\n onBlockAccount();\n };\n\n const handleBlockDomainClick = (e: React.MouseEvent<HTMLElement>) => {\n e.stopPropagation();\n onBlockDomain();\n };\n\n const handle = account?.handle;\n const domain = handle?.split('@').filter(Boolean)[1];\n\n const renderBlockView = () => (\n <AlertDialog open={dialogOpen} onOpenChange={setDialogOpen}>\n <AlertDialogContent onClick={e => e.stopPropagation()}>\n <AlertDialogHeader>\n <AlertDialogTitle className='mb-1 flex flex-col gap-1'>\n {dialogType === 'user' ? 'Block this user?' : 'Block this domain?'}\n </AlertDialogTitle>\n <AlertDialogDescription>\n {dialogType === 'user'\n ? <><span className='font-semibold text-black'>{handle}</span> will be able to see your public posts, but will no longer be able follow you or interact with your content on the social web.</>\n : <>All users from <span className='font-semibold text-black'>{domain}</span> will be able to see your public posts, but won&apos;t be able to follow you or interact with your content.</>\n }\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n {dialogType !== 'domain' &&\n <Button className='mr-auto -ml-3 hover:bg-transparent hover:opacity-80' variant='ghost' onClick={(e) => {\n e.stopPropagation();\n setDialogType('domain');\n }}>Block domain instead</Button>\n }\n <AlertDialogCancel onClick={e => e.stopPropagation()}>\n Cancel\n </AlertDialogCancel>\n <AlertDialogAction\n className={buttonVariants({variant: 'destructive'})}\n onClick={dialogType === 'user' ? handleBlockAccountClick : handleBlockDomainClick}\n >\n Block\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n );\n\n const renderUnblockView = () => (\n account && <UnblockDialog\n handle={account.handle}\n isDomainBlocked={account.domainBlockedByMe}\n isOpen={dialogOpen}\n isUserBlocked={account.blockedByMe}\n onOpenChange={setDialogOpen}\n onUnblockDomain={onBlockDomain}\n onUnblockUser={onBlockAccount}\n />\n );\n\n return (\n <>\n <Popover>\n <PopoverTrigger disabled={disabled} asChild onClick={e => e.stopPropagation()}>\n {children}\n </PopoverTrigger>\n <PopoverContent align=\"end\" className='p-2'>\n <div className='flex w-48 flex-col'>\n <PopoverClose asChild>\n <Button className='justify-start' variant='ghost' onClick={handleCopyHandleClick}>\n Copy handle\n </Button>\n </PopoverClose>\n <PopoverClose asChild>\n <Button className='justify-start text-red hover:bg-red/5 hover:text-red' variant='ghost' onClick={(e) => {\n e.stopPropagation();\n if (!isBlocked && !isDomainBlocked) {\n setDialogType('user');\n }\n setDialogOpen(true);\n }}>\n {isBlocked ? 'Unblock user' : isDomainBlocked ? 'Unblock domain' : 'Block user'}\n </Button>\n </PopoverClose>\n </div>\n </PopoverContent>\n </Popover>\n {isBlocked || isDomainBlocked ? renderUnblockView() : renderBlockView()}\n </>\n );\n};\n\nexport default ProfileMenu;\n","import React, {useState} from 'react';\nimport UnblockDialog from './unblock-dialog';\nimport {Account} from '@src/api/activitypub';\nimport {Button} from '@tryghost/shade/components';\n\ninterface UnblockButtonProps {\n account: Account,\n onUnblock: () => void;\n onDomainUnblock: () => void;\n className?: string;\n}\n\nconst UnblockButton: React.FC<UnblockButtonProps> = ({\n account,\n onUnblock,\n onDomainUnblock,\n className = ''\n}) => {\n const [isHovered, setIsHovered] = useState(false);\n\n const trigger = (\n <Button\n className={`min-w-[90px] ${className}`}\n variant='destructive'\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {isHovered ? 'Unblock' : 'Blocked'}\n </Button>\n );\n\n return (\n <UnblockDialog\n handle={account.handle}\n isDomainBlocked={account.domainBlockedByMe}\n isUserBlocked={account.blockedByMe}\n trigger={trigger}\n onUnblockDomain={onDomainUnblock}\n onUnblockUser={onUnblock}\n />\n );\n};\n\nexport default UnblockButton;\n","import APAvatar from '@src/components/global/ap-avatar';\nimport EditProfile from '@src/views/preferences/components/edit-profile';\nimport FollowButton from '@src/components/global/follow-button';\nimport Layout from '@src/components/layout';\nimport ProfileMenu from './profile-menu';\nimport UnblockButton from './unblock-button';\nimport {Account} from '@src/api/activitypub';\nimport {Badge, Button, Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, NoValueLabel, NoValueLabelIcon, Skeleton, Tabs, TabsContent, TabsList, TabsTrigger, TabsTriggerCount} from '@tryghost/shade/components';\nimport {EmptyViewIcon, EmptyViewIndicator} from '@src/components/global/empty-view-indicator';\nimport {H2, H4} from '@tryghost/shade/primitives';\nimport {LucideIcon, abbreviateNumber} from '@tryghost/shade/utils';\nimport {SettingAction} from '@src/views/preferences/components/settings';\nimport {openLinksInNewTab, sanitizeHtml, stripHtml} from '@src/utils/content-formatters';\nimport {toast} from 'sonner';\nimport {useAccountForUser, useBlockDomainMutationForUser, useBlockMutationForUser, useUnblockDomainMutationForUser, useUnblockMutationForUser} from '@src/hooks/use-activity-pub-queries';\nimport {useEffect, useMemo, useRef, useState} from 'react';\nimport {useLocation, useNavigationStack, useParams} from '@tryghost/admin-x-framework';\nimport {useNavigateWithBasePath} from '@src/hooks/use-navigate-with-base-path';\nimport type {ProfileTab} from '../profile';\n\nconst noop = () => {};\n\ntype ProfilePageProps = {\n account: Account,\n customFields: Array<{\n name: string;\n value: string;\n }>,\n postsTab: React.ReactNode,\n likesTab: React.ReactNode,\n followingTab: React.ReactNode,\n followersTab: React.ReactNode,\n isLoadingAccount: boolean\n}\n\nconst ProfilePage:React.FC<ProfilePageProps> = ({\n account,\n customFields,\n isLoadingAccount,\n postsTab,\n likesTab,\n followingTab,\n followersTab\n}) => {\n const params = useParams<{handle?: string; tab?: string}>();\n const location = useLocation();\n const navigate = useNavigateWithBasePath();\n const {canGoBack} = useNavigationStack();\n\n const profilePath = params.handle ? `/profile/${params.handle}` : '/profile';\n const likesEnabled = !params.handle;\n\n const tabSlug = params.handle\n ? (params.tab || '')\n : (location.pathname.split('/').pop() || '');\n\n const allowedTabs = useMemo<ProfileTab[]>(() => (\n likesEnabled ? ['likes', 'following', 'followers'] : ['following', 'followers']\n ), [likesEnabled]);\n const activeTab: ProfileTab = allowedTabs.includes(tabSlug as ProfileTab) ? tabSlug as ProfileTab : 'posts';\n\n const blockMutation = useBlockMutationForUser('index');\n const unblockMutation = useUnblockMutationForUser('index');\n const blockDomainMutation = useBlockDomainMutationForUser('index');\n const unblockDomainMutation = useUnblockDomainMutationForUser('index');\n\n const currentAccountQuery = useAccountForUser('index', 'me');\n const {data: currentUser} = params.handle ? currentAccountQuery : {data: undefined};\n const isCurrentUser = params.handle === currentUser?.handle || !params.handle;\n\n const isBlocked = account?.blockedByMe;\n const isDomainBlocked = account?.domainBlockedByMe;\n const [viewBlockedPosts, setViewBlockedPosts] = useState(false);\n const [copied, setCopied] = useState(false);\n const copyTimeoutRef = useRef<number | null>(null);\n\n useEffect(() => () => {\n if (copyTimeoutRef.current) {\n window.clearTimeout(copyTimeoutRef.current);\n }\n }, []);\n\n const handleBlock = () => {\n if (isBlocked) {\n unblockMutation.mutate(account);\n } else {\n blockMutation.mutate(account);\n toast.success('User blocked');\n }\n setViewBlockedPosts(false);\n };\n\n const handleDomainBlock = () => {\n if (isDomainBlocked) {\n unblockDomainMutation.mutate({url: account.apId, handle: account.handle});\n } else {\n blockDomainMutation.mutate({url: account.apId, handle: account.handle});\n toast.success('Domain blocked');\n }\n setViewBlockedPosts(false);\n };\n\n const handleCopy = async () => {\n if (!account?.handle || !navigator?.clipboard?.writeText) {\n toast.error('Unable to copy handle');\n return;\n }\n try {\n await navigator.clipboard.writeText(account.handle);\n setCopied(true);\n toast.success('Handle copied');\n if (copyTimeoutRef.current) {\n window.clearTimeout(copyTimeoutRef.current);\n }\n copyTimeoutRef.current = window.setTimeout(() => setCopied(false), 2000);\n } catch {\n toast.error('Failed to copy handle');\n setCopied(false);\n }\n };\n\n const [isExpanded, setisExpanded] = useState(false);\n const [isEditingProfile, setIsEditingProfile] = useState(false);\n\n const toggleExpand = () => {\n setisExpanded(!isExpanded);\n };\n\n const contentRef = useRef<HTMLDivElement | null>(null);\n const [isOverflowing, setIsOverflowing] = useState(false);\n\n useEffect(() => {\n if (contentRef.current) {\n setIsOverflowing(contentRef.current.scrollHeight > 160); // Compare content height to max height\n }\n }, [isExpanded, account?.bio, customFields, isLoadingAccount]);\n\n useEffect(() => {\n if (!tabSlug) {\n return;\n }\n\n if (!allowedTabs.includes(tabSlug as ProfileTab)) {\n navigate(profilePath, {replace: true});\n }\n }, [allowedTabs, profilePath, navigate, tabSlug]);\n\n const createTabPath = (tab: ProfileTab) => {\n if (tab === 'posts') {\n return profilePath;\n }\n\n return `${profilePath}/${tab}`;\n };\n\n const handleTabChange = (tab: ProfileTab) => {\n if (tab === activeTab) {\n return;\n }\n\n navigate(createTabPath(tab), {replace: true});\n };\n\n if (!isLoadingAccount && !account) {\n return (\n <Layout>\n <div className='mx-auto mt-4 flex w-full max-w-[620px] flex-col items-center [&_svg]:translate-x-px'>\n <EmptyViewIndicator>\n <EmptyViewIcon><LucideIcon.UserRoundX /></EmptyViewIcon>\n <div>Profile not found</div>\n </EmptyViewIndicator>\n </div>\n </Layout>\n );\n }\n\n return (\n <Layout>\n <div className='z-0 mx-[max(-4vw,-32px)] -mt-9 flex flex-col items-center pb-16'>\n <div className='mx-auto w-full'>\n <>\n {account?.bannerImageUrl ?\n <div className='h-[15vw] min-h-[200px] w-full overflow-hidden bg-gradient-to-tr from-gray-200 to-gray-100'>\n <img\n alt={account?.name}\n className='size-full object-cover'\n referrerPolicy='no-referrer'\n src={account?.bannerImageUrl}\n />\n </div>\n :\n <div className='h-[max(8vw,132px)] w-full overflow-hidden bg-gradient-to-tr from-white to-white dark:from-black dark:to-black'></div>\n }\n <div className={`mx-auto max-w-[620px] px-6 ${(!account?.bannerImageUrl && !canGoBack) ? '-mt-8' : '-mt-12'}`}>\n <div className='flex items-end justify-between'>\n <div className='-ml-2 rounded-full bg-white p-1 dark:bg-black'>\n {isLoadingAccount ?\n <Skeleton className='size-[92px] rounded-full' />\n :\n <APAvatar\n author={\n {\n icon: {\n url: account?.avatarUrl\n },\n name: account?.name,\n handle: account?.handle\n }\n }\n size='lg'\n />\n }\n </div>\n {!isCurrentUser && !isLoadingAccount &&\n <div className='flex gap-2'>\n {!(isBlocked || isDomainBlocked) ?\n <FollowButton\n following={account?.followedByMe}\n handle={account?.handle}\n type='primary'\n onFollow={noop}\n onUnfollow={noop}\n /> :\n <UnblockButton\n account={account}\n onDomainUnblock={handleDomainBlock}\n onUnblock={handleBlock}\n />\n }\n <ProfileMenu\n account={account}\n isBlocked={isBlocked}\n isDomainBlocked={isDomainBlocked}\n onBlockAccount={handleBlock}\n onBlockDomain={handleDomainBlock}\n onCopyHandle={handleCopy}\n >\n <Button aria-label='Open profile menu' variant='outline'><LucideIcon.Ellipsis /></Button>\n </ProfileMenu>\n </div>\n }\n {isCurrentUser && !isLoadingAccount &&\n <Dialog open={isEditingProfile} onOpenChange={setIsEditingProfile}>\n <DialogTrigger>\n <SettingAction><Button variant='secondary'>Edit profile</Button></SettingAction>\n </DialogTrigger>\n <DialogContent className='w-full max-w-[520px]' onOpenAutoFocus={e => e.preventDefault()}>\n <DialogHeader>\n <DialogTitle>Profile settings</DialogTitle>\n </DialogHeader>\n {account && <EditProfile account={account} setIsEditingProfile={setIsEditingProfile} />}\n </DialogContent>\n </Dialog>\n }\n </div>\n <H2 className='break-anywhere mt-4 truncate'>{!isLoadingAccount ? account?.name : <Skeleton className='w-32' />}</H2>\n <div className='mb-4 flex items-center gap-2'>\n <a className='inline-flex max-w-full truncate text-[1.5rem] text-gray-800 hover:text-gray-900 dark:text-gray-600 dark:hover:text-gray-500' href={account?.url} rel='noopener noreferrer' target='_blank'>\n <span className='truncate'>{!isLoadingAccount ? account?.handle : <Skeleton className='w-full max-w-56' />}</span>\n </a>\n {!isLoadingAccount && (\n <Button className='-ml-1.5 size-6 p-0 text-gray-800 hover:text-gray-900 dark:text-gray-700 dark:hover:text-gray-600' title='Copy handle' variant='link' onClick={handleCopy}>\n {!copied ?\n <LucideIcon.Copy size={16} /> :\n <LucideIcon.Check size={16} />\n }\n </Button>\n )}\n {account?.followsMe && !isLoadingAccount && (\n <Badge className='mt-px whitespace-nowrap' variant='secondary'>Follows you</Badge>\n )}\n </div>\n {(account?.bio || customFields?.length > 0) && (<div ref={contentRef} className={`ap-profile-content break-anywhere relative text-[1.5rem] [&>p]:mb-3 ${isExpanded ? 'max-h-none pb-7' : 'max-h-[160px] overflow-hidden'} relative`}>\n {!isLoadingAccount ?\n <div dangerouslySetInnerHTML={{__html: sanitizeHtml(openLinksInNewTab(stripHtml(account?.bio ?? '', ['a', 'br'])))}} /> :\n <>\n <Skeleton />\n <Skeleton className='w-full max-w-48' />\n </>\n }\n {customFields?.map((attachment: {name: string, value: string}) => (\n <span className='mt-3 line-clamp-1 flex flex-col text-[1.5rem]'>\n <span className={`text-xs font-semibold`}>{attachment.name}</span>\n <span dangerouslySetInnerHTML={{__html: sanitizeHtml(attachment.value)}} className='ap-profile-content truncate'/>\n </span>\n ))}\n {!isExpanded && isOverflowing && (\n <div className='absolute inset-x-0 bottom-0 h-16 bg-gradient-to-t from-white via-white/100 via-60% to-transparent dark:from-black dark:via-black/100' />\n )}\n {isOverflowing && <Button\n className='absolute bottom-0 h-auto p-0 text-md'\n variant='link'\n onClick={toggleExpand}\n >{isExpanded ? 'Show less' : 'Show all'}</Button>}\n </div>)}\n <Tabs\n key={params.handle || account?.handle || 'current-user'}\n className='mt-5'\n value={activeTab}\n variant='underline'\n onValueChange={value => handleTabChange(value as ProfileTab)}\n >\n <TabsList>\n <TabsTrigger value=\"posts\">Posts</TabsTrigger>\n {likesEnabled && <TabsTrigger value=\"likes\">\n Likes\n <TabsTriggerCount>{abbreviateNumber(account?.likedCount || 0)}</TabsTriggerCount>\n </TabsTrigger>}\n <TabsTrigger value=\"following\">\n Following\n <TabsTriggerCount>{abbreviateNumber(account?.followingCount || 0)}</TabsTriggerCount>\n </TabsTrigger>\n <TabsTrigger value=\"followers\">\n Followers\n <TabsTriggerCount>{abbreviateNumber(account?.followerCount || 0)}</TabsTriggerCount>\n </TabsTrigger>\n </TabsList>\n <TabsContent value='posts'>\n {((isBlocked || isDomainBlocked) && !viewBlockedPosts) ?\n <NoValueLabel>\n <NoValueLabelIcon><LucideIcon.Ban /></NoValueLabelIcon>\n <div className='mt-2 flex flex-col items-center gap-0.5'>\n <H4>{account.name} is blocked</H4>\n <p>You can view the posts, but it won&apos;t unblock the user.</p>\n <Button className='mt-4' variant='secondary' onClick={() => setViewBlockedPosts(true)}>View posts</Button>\n </div>\n </NoValueLabel> :\n postsTab\n }\n </TabsContent>\n {likesEnabled && <TabsContent value='likes'>\n {likesTab}\n </TabsContent>}\n <TabsContent value='following'>\n {followingTab}\n </TabsContent>\n <TabsContent value='followers'>\n {followersTab}\n </TabsContent>\n </Tabs>\n </div>\n </>\n </div>\n </div>\n </Layout>\n );\n};\n\nexport default ProfilePage;\n","import ActorList from './components/actor-list';\nimport AppError from '@components/layout/error';\nimport Likes from './components/likes';\nimport Posts from './components/posts';\nimport ProfilePage from './components/profile-page';\nimport React, {useEffect} from 'react';\nimport {Activity, isApiError} from '@src/api/activitypub';\nimport {useAccountFollowsForUser, useAccountForUser, usePostsByAccount, usePostsLikedByAccount} from '@hooks/use-activity-pub-queries';\nimport {useParams} from '@tryghost/admin-x-framework';\n\nexport type ProfileTab = 'posts' | 'likes' | 'following' | 'followers';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\ninterface ProfileProps {}\n\nconst PostsTab:React.FC<{handle: string}> = ({handle}) => {\n const {postsByAccountQuery} = usePostsByAccount(handle ? handle : 'me', {enabled: true});\n\n const {\n data,\n fetchNextPage,\n hasNextPage,\n isFetchingNextPage,\n isLoading\n } = postsByAccountQuery;\n\n const posts = data?.pages.flatMap((page: {posts: Activity[]}) => page.posts) ?? Array.from({length: 5}, (_, index) => ({id: `placeholder-${index}`, object: {}}));\n\n return <Posts\n fetchNextPage={fetchNextPage}\n hasNextPage={hasNextPage!}\n isFetchingNextPage={isFetchingNextPage}\n isLoading={isLoading}\n noResultsMessage={handle ? `${handle} hasn't posted anything yet` : `You haven't posted anything yet.`}\n posts={posts}\n />;\n};\n\nconst LikesTab: React.FC = () => {\n const {postsLikedByAccountQuery} = usePostsLikedByAccount({enabled: true});\n const {data, fetchNextPage, hasNextPage, isFetchingNextPage, isLoading} = postsLikedByAccountQuery;\n\n const posts = data?.pages.flatMap(page => page.posts) ?? Array.from({length: 5}, (_, index) => ({id: `placeholder-${index}`, object: {}}));\n\n return <Likes\n fetchNextPage={fetchNextPage}\n hasNextPage={hasNextPage!}\n isFetchingNextPage={isFetchingNextPage}\n isLoading={isLoading}\n posts={posts}\n />;\n};\n\nconst FollowingTab: React.FC<{handle: string}> = ({handle}) => {\n const accountQuery = useAccountFollowsForUser(handle === '' ? 'me' : handle, 'following');\n\n const {\n data,\n fetchNextPage,\n hasNextPage,\n isFetchingNextPage,\n isLoading\n } = accountQuery;\n\n const actors = data?.pages.flatMap((page) => {\n if ('following' in page) {\n return page.following;\n } else if ('accounts' in page) {\n return page.accounts.map(account => ({\n actor: {\n id: account.id,\n name: account.name,\n handle: account.handle,\n icon: {\n url: account.avatarUrl\n }\n },\n isFollowing: account.isFollowing,\n blockedByMe: account.blockedByMe,\n domainBlockedByMe: account.domainBlockedByMe\n }));\n }\n return [];\n }) ?? [];\n\n return (\n <ActorList\n actors={actors}\n fetchNextPage={fetchNextPage}\n hasNextPage={hasNextPage!}\n isFetchingNextPage={isFetchingNextPage}\n isLoading={isLoading}\n noResultsMessage={`${handle || 'You'} have no following`}\n />\n );\n};\n\nconst FollowersTab: React.FC<{handle: string}> = ({handle}) => {\n const accountQuery = useAccountFollowsForUser(handle === '' ? 'me' : handle, 'followers');\n\n const {\n data,\n fetchNextPage,\n hasNextPage,\n isFetchingNextPage,\n isLoading\n } = accountQuery;\n\n const actors = data?.pages.flatMap((page) => {\n if ('followers' in page) {\n return page.followers;\n } else if ('accounts' in page) {\n return page.accounts.map(account => ({\n actor: {\n id: account.id,\n name: account.name,\n handle: account.handle,\n icon: {\n url: account.avatarUrl\n }\n },\n isFollowing: account.isFollowing\n }));\n }\n return [];\n }) ?? [];\n\n return (\n <ActorList\n actors={actors}\n fetchNextPage={fetchNextPage}\n hasNextPage={hasNextPage!}\n isFetchingNextPage={isFetchingNextPage}\n isLoading={isLoading}\n noResultsMessage={`${handle || 'You'} have no followers yet`}\n />\n );\n};\n\nconst Profile: React.FC<ProfileProps> = ({}) => {\n const params = useParams();\n\n const {data: account, isLoading: isLoadingAccount, error: accountError, refetch} = useAccountForUser('index', (params.handle || 'me'));\n\n useEffect(() => {\n refetch();\n }, [params.handle, refetch]);\n\n if (accountError && isApiError(accountError) && accountError.statusCode !== 404) {\n return <AppError errorCode={accountError.code} statusCode={accountError.statusCode} />;\n }\n\n const customFields = Object.keys(account?.customFields || {}).map((key) => {\n return {\n name: key,\n value: account!.customFields[key]\n };\n }) || [];\n\n const postsTab = <PostsTab handle={params.handle || ''} />;\n const likesTab = <LikesTab />;\n const followingTab = <FollowingTab handle={params.handle || ''} />;\n const followersTab = <FollowersTab handle={params.handle || ''} />;\n\n return <ProfilePage\n account={account!}\n customFields={customFields}\n followersTab={followersTab}\n followingTab={followingTab}\n isLoadingAccount={isLoadingAccount}\n likesTab={likesTab}\n postsTab={postsTab}\n />;\n};\n\nexport default Profile;\n"],"names":["__iconNode","Pencil","createLucideIcon","UserRoundX","getName","actor","ActorList","noResultsMessage","actors","isLoading","fetchNextPage","hasNextPage","isFetchingNextPage","currentAccountQuery","useAccountForUser","currentUser","observerRef","useRef","loadMoreRef","useEffect","entries","navigate","useNavigateWithBasePath","jsxs","NoValueLabel","jsx","NoValueLabelIcon","LucideIcon.UserRoundPlus","isFollowing","blockedByMe","domainBlockedByMe","actorHandle","getUsername","isCurrentUser","React","ProfilePreviewHoverCard","ActivityItem","handleProfileClick","APAvatar","Button","FollowButton","LoadingIndicator","Likes","posts","endLoadMoreRef","loadMoreIndex","Fragment","LucideIcon.Heart","activity","index","FeedItem","Separator","Posts","LucideIcon.Pencil","UnblockDialog","handle","isUserBlocked","isDomainBlocked","onUnblockUser","onUnblockDomain","trigger","onUnblockComplete","externalIsOpen","externalOnOpenChange","internalDialogOpen","setInternalDialogOpen","useState","dialogState","setDialogState","bothBlocked","userOnlyBlocked","domainOnlyBlocked","mode","isControlled","dialogOpen","wasOpened","setWasOpened","initializeDialogState","useCallback","prev","handleDialogOpen","handleDialogClose","open","handleUnblock","toast","handleDomainUnblock","domain","renderDualView","AlertDialogHeader","AlertDialogTitle","AlertDialogDescription","H4","LucideIcon.User","LucideIcon.Globe","AlertDialogFooter","renderSingleView","isUserBlock","AlertDialogCancel","AlertDialog","AlertDialogTrigger","AlertDialogContent","ProfileMenu","account","children","onCopyHandle","onBlockAccount","onBlockDomain","disabled","isBlocked","dialogType","setDialogType","setDialogOpen","handleCopyHandleClick","e","handleBlockAccountClick","handleBlockDomainClick","renderBlockView","AlertDialogAction","buttonVariants","renderUnblockView","Popover","PopoverTrigger","PopoverContent","PopoverClose","UnblockButton","onUnblock","onDomainUnblock","className","isHovered","setIsHovered","noop","ProfilePage","customFields","isLoadingAccount","postsTab","likesTab","followingTab","followersTab","params","useParams","location","useLocation","canGoBack","useNavigationStack","profilePath","likesEnabled","tabSlug","allowedTabs","useMemo","activeTab","blockMutation","useBlockMutationForUser","unblockMutation","useUnblockMutationForUser","blockDomainMutation","useBlockDomainMutationForUser","unblockDomainMutation","useUnblockDomainMutationForUser","viewBlockedPosts","setViewBlockedPosts","copied","setCopied","copyTimeoutRef","handleBlock","handleDomainBlock","handleCopy","_a","isExpanded","setisExpanded","isEditingProfile","setIsEditingProfile","toggleExpand","contentRef","isOverflowing","setIsOverflowing","createTabPath","tab","handleTabChange","Layout","EmptyViewIndicator","EmptyViewIcon","LucideIcon.UserRoundX","Skeleton","LucideIcon.Ellipsis","Dialog","DialogTrigger","SettingAction","DialogContent","DialogHeader","DialogTitle","EditProfile","H2","LucideIcon.Check","LucideIcon.Copy","Badge","sanitizeHtml","openLinksInNewTab","stripHtml","attachment","Tabs","value","TabsList","TabsTrigger","TabsTriggerCount","abbreviateNumber","TabsContent","LucideIcon.Ban","PostsTab","postsByAccountQuery","usePostsByAccount","data","page","_","LikesTab","postsLikedByAccountQuery","usePostsLikedByAccount","FollowingTab","accountQuery","useAccountFollowsForUser","FollowersTab","Profile","accountError","refetch","isApiError","AppError","key"],"mappings":"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","x_google_ignoreList":[0,1]}
@@ -1,5 +1,5 @@
1
- import { v as F, w as T, x as _, y as E, b as x, z as H, G as V, d as W, j as e, L as R, I as $, N as p, J as v, K as w, P as z, M as f, h as G, A as J, S as t, B as c, O as i } from "./index-DJ5p5ESW.mjs";
2
- import { T as K, a as O, b as N, c as g } from "./tabs-B7coKvuk.mjs";
1
+ import { v as F, w as T, x as _, y as E, b as x, z as H, G as V, d as W, j as e, L as R, I as $, N as p, J as v, K as w, P as z, M as f, A as G, S as t, B as c, h as J, O as i } from "./index-DHVdVxus.mjs";
2
+ import { T as K, a as O, b as N, c as g } from "./tabs-BDqPEpa2.mjs";
3
3
  const X = () => {
4
4
  const { data: d, isLoading: n } = F("index"), { data: u, isLoading: o } = T("index"), m = n ? Array(5).fill({ apId: "", name: "", handle: "", avatarUrl: "" }) : (d == null ? void 0 : d.pages.flatMap((s) => s.accounts)) ?? [], h = o ? Array(5).fill({ apId: "", name: "" }) : (u == null ? void 0 : u.pages.flatMap((s) => s.domains)) ?? [], I = _("index"), U = E("index"), [M, k] = x(/* @__PURE__ */ new Set()), B = H("index"), y = V("index"), [S, b] = x(/* @__PURE__ */ new Set()), [j, r] = x(null), L = W(), A = (s) => {
5
5
  k((l) => {
@@ -35,10 +35,10 @@ const X = () => {
35
35
  ] }) : m.map((s, l) => /* @__PURE__ */ e.jsx(z, { actor: s, isCurrentUser: !0, children: /* @__PURE__ */ e.jsx("div", { children: /* @__PURE__ */ e.jsxs(
36
36
  f,
37
37
  {
38
- onClick: n ? void 0 : () => G(s.handle, L),
38
+ onClick: n ? void 0 : () => J(s.handle, L),
39
39
  children: [
40
40
  /* @__PURE__ */ e.jsx(
41
- J,
41
+ G,
42
42
  {
43
43
  author: {
44
44
  icon: {
@@ -56,7 +56,7 @@ const X = () => {
56
56
  M.has(s.apId) ? /* @__PURE__ */ e.jsx(
57
57
  c,
58
58
  {
59
- className: "hover:bg-red/5! ml-auto min-w-[90px] text-red hover:text-red-400",
59
+ className: "ml-auto min-w-[90px] text-red hover:bg-red/5! hover:text-red-400",
60
60
  variant: "outline",
61
61
  onClick: (a) => {
62
62
  a.stopPropagation(), D(s);
@@ -87,7 +87,7 @@ const X = () => {
87
87
  S.has(s.url) ? /* @__PURE__ */ e.jsx(
88
88
  c,
89
89
  {
90
- className: "hover:bg-red/5! ml-auto min-w-[90px] text-red hover:text-red-400",
90
+ className: "ml-auto min-w-[90px] text-red hover:bg-red/5! hover:text-red-400",
91
91
  variant: "outline",
92
92
  onClick: () => P(s),
93
93
  children: "Block"
@@ -110,4 +110,4 @@ const X = () => {
110
110
  export {
111
111
  X as default
112
112
  };
113
- //# sourceMappingURL=moderation-CF26LtsR.mjs.map
113
+ //# sourceMappingURL=moderation-DltWXOVa.mjs.map