@tryghost/activitypub 3.0.8 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/activitypub.js +2 -2
  2. package/dist/{at-sign-Fsk3x72r.mjs → at-sign-l8HMU0fk.mjs} +2 -2
  3. package/dist/{at-sign-Fsk3x72r.mjs.map → at-sign-l8HMU0fk.mjs.map} +1 -1
  4. package/dist/{avatar-flipboard-C10JfFS_.mjs → avatar-flipboard-D12yCmyH.mjs} +2 -2
  5. package/dist/{avatar-flipboard-C10JfFS_.mjs.map → avatar-flipboard-D12yCmyH.mjs.map} +1 -1
  6. package/dist/{bluesky-sharing-C1xeGSL6.mjs → bluesky-sharing-D65sfQFX.mjs} +4 -4
  7. package/dist/{bluesky-sharing-C1xeGSL6.mjs.map → bluesky-sharing-D65sfQFX.mjs.map} +1 -1
  8. package/dist/{copy-C1fElSkQ.mjs → copy-DCHXVz-9.mjs} +2 -2
  9. package/dist/{copy-C1fElSkQ.mjs.map → copy-DCHXVz-9.mjs.map} +1 -1
  10. package/dist/{deleted-feed-item-Bun4tY2_.mjs → deleted-feed-item-BkXeOOSC.mjs} +4 -4
  11. package/dist/{deleted-feed-item-Bun4tY2_.mjs.map → deleted-feed-item-BkXeOOSC.mjs.map} +1 -1
  12. package/dist/{edit-profile-CYh00FZ7.mjs → edit-profile-DdCJ6UkE.mjs} +3 -3
  13. package/dist/{edit-profile-CYh00FZ7.mjs.map → edit-profile-DdCJ6UkE.mjs.map} +1 -1
  14. package/dist/{feed-BxUqmcN9.mjs → feed-D4gYSgoO.mjs} +4 -4
  15. package/dist/{feed-BxUqmcN9.mjs.map → feed-D4gYSgoO.mjs.map} +1 -1
  16. package/dist/{hash-CNgwAx-U.mjs → hash-D_Ql6FHR.mjs} +2 -2
  17. package/dist/{hash-CNgwAx-U.mjs.map → hash-D_Ql6FHR.mjs.map} +1 -1
  18. package/dist/{inbox-DqNqII4a.mjs → inbox-BIeU-G-G.mjs} +2 -2
  19. package/dist/{inbox-DqNqII4a.mjs.map → inbox-BIeU-G-G.mjs.map} +1 -1
  20. package/dist/{index-CJJXnqq1.mjs → index-BlNT1f8K.mjs} +38 -38
  21. package/dist/index-BlNT1f8K.mjs.map +1 -0
  22. package/dist/{index-C9pnotJK.mjs → index-BurflorF.mjs} +466 -375
  23. package/dist/index-BurflorF.mjs.map +1 -0
  24. package/dist/{index-CONoLlDU.mjs → index-BvOcRwis.mjs} +2 -2
  25. package/dist/{index-CONoLlDU.mjs.map → index-BvOcRwis.mjs.map} +1 -1
  26. package/dist/{index-Dvh9q3jy.mjs → index-CPG1Xmp8.mjs} +6 -6
  27. package/dist/{index-Dvh9q3jy.mjs.map → index-CPG1Xmp8.mjs.map} +1 -1
  28. package/dist/{index--Q6orQkb.mjs → index-DIicyWvr.mjs} +10224 -9581
  29. package/dist/index-DIicyWvr.mjs.map +1 -0
  30. package/dist/{index-jhjmoHwu.mjs → index-DK0316YP.mjs} +13 -13
  31. package/dist/{index-jhjmoHwu.mjs.map → index-DK0316YP.mjs.map} +1 -1
  32. package/dist/{index-C3KJXzZE.mjs → index-DiYjJ67s.mjs} +115 -115
  33. package/dist/index-DiYjJ67s.mjs.map +1 -0
  34. package/dist/{index-BueIufRq.mjs → index-l72TqahD.mjs} +5 -5
  35. package/dist/{index-BueIufRq.mjs.map → index-l72TqahD.mjs.map} +1 -1
  36. package/dist/{moderation-CYhwUFi2.mjs → moderation-B0rtiaEH.mjs} +3 -3
  37. package/dist/{moderation-CYhwUFi2.mjs.map → moderation-B0rtiaEH.mjs.map} +1 -1
  38. package/dist/{note-COVa8CMw.mjs → note-DjaU27En.mjs} +4 -4
  39. package/dist/{note-COVa8CMw.mjs.map → note-DjaU27En.mjs.map} +1 -1
  40. package/dist/{reply-BHpKVBxx.mjs → reply-4cqNFwLY.mjs} +2 -2
  41. package/dist/{reply-BHpKVBxx.mjs.map → reply-4cqNFwLY.mjs.map} +1 -1
  42. package/dist/{separator-DP7q5sFH.mjs → separator-Dgj8LPTF.mjs} +12 -12
  43. package/dist/{separator-DP7q5sFH.mjs.map → separator-Dgj8LPTF.mjs.map} +1 -1
  44. package/dist/{settings-3n7zo_3K.mjs → settings-qNWc2HyW.mjs} +3 -3
  45. package/dist/{settings-3n7zo_3K.mjs.map → settings-qNWc2HyW.mjs.map} +1 -1
  46. package/dist/{step-1-BmUukywZ.mjs → step-1-CuRWXSkm.mjs} +12 -12
  47. package/dist/{step-1-BmUukywZ.mjs.map → step-1-CuRWXSkm.mjs.map} +1 -1
  48. package/dist/{step-2-C--I3xxp.mjs → step-2-BsxjLzY8.mjs} +5 -5
  49. package/dist/{step-2-C--I3xxp.mjs.map → step-2-BsxjLzY8.mjs.map} +1 -1
  50. package/dist/{step-3-0Deh5N9c.mjs → step-3-NBvYqr7R.mjs} +7 -7
  51. package/dist/{step-3-0Deh5N9c.mjs.map → step-3-NBvYqr7R.mjs.map} +1 -1
  52. package/dist/{tabs-D_vmoLBo.mjs → tabs-ROut24vi.mjs} +3 -3
  53. package/dist/{tabs-D_vmoLBo.mjs.map → tabs-ROut24vi.mjs.map} +1 -1
  54. package/dist/{topic-filter-DJMrhH-c.mjs → topic-filter-YL1wy3Q1.mjs} +2 -2
  55. package/dist/{topic-filter-DJMrhH-c.mjs.map → topic-filter-YL1wy3Q1.mjs.map} +1 -1
  56. package/package.json +3 -1
  57. package/dist/index--Q6orQkb.mjs.map +0 -1
  58. package/dist/index-C3KJXzZE.mjs.map +0 -1
  59. package/dist/index-C9pnotJK.mjs.map +0 -1
  60. package/dist/index-CJJXnqq1.mjs.map +0 -1
@@ -1,4 +1,4 @@
1
- import { a6 as c } from "./index--Q6orQkb.mjs";
1
+ import { a6 as c } from "./index-DIicyWvr.mjs";
2
2
  /**
3
3
  * @license lucide-react v0.553.0 - ISC
4
4
  *
@@ -12,4 +12,4 @@ const e = [
12
12
  export {
13
13
  o as A
14
14
  };
15
- //# sourceMappingURL=at-sign-Fsk3x72r.mjs.map
15
+ //# sourceMappingURL=at-sign-l8HMU0fk.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"at-sign-Fsk3x72r.mjs","sources":["../../../node_modules/lucide-react/dist/esm/icons/at-sign.js"],"sourcesContent":["/**\n * @license lucide-react v0.553.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 [\"circle\", { cx: \"12\", cy: \"12\", r: \"4\", key: \"4exip2\" }],\n [\"path\", { d: \"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8\", key: \"7n84p3\" }]\n];\nconst AtSign = createLucideIcon(\"at-sign\", __iconNode);\n\nexport { __iconNode, AtSign as default };\n//# sourceMappingURL=at-sign.js.map\n"],"names":["__iconNode","AtSign","createLucideIcon"],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB,CAAC,UAAU,EAAE,IAAI,MAAM,IAAI,MAAM,GAAG,KAAK,KAAK,UAAU;AAAA,EACxD,CAAC,QAAQ,EAAE,GAAG,4CAA4C,KAAK,SAAQ,CAAE;AAC3E,GACMC,IAASC,EAAiB,WAAWF,CAAU;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"at-sign-l8HMU0fk.mjs","sources":["../../../node_modules/lucide-react/dist/esm/icons/at-sign.js"],"sourcesContent":["/**\n * @license lucide-react v0.553.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 [\"circle\", { cx: \"12\", cy: \"12\", r: \"4\", key: \"4exip2\" }],\n [\"path\", { d: \"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8\", key: \"7n84p3\" }]\n];\nconst AtSign = createLucideIcon(\"at-sign\", __iconNode);\n\nexport { __iconNode, AtSign as default };\n//# sourceMappingURL=at-sign.js.map\n"],"names":["__iconNode","AtSign","createLucideIcon"],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB,CAAC,UAAU,EAAE,IAAI,MAAM,IAAI,MAAM,GAAG,KAAK,KAAK,UAAU;AAAA,EACxD,CAAC,QAAQ,EAAE,GAAG,4CAA4C,KAAK,SAAQ,CAAE;AAC3E,GACMC,IAASC,EAAiB,WAAWF,CAAU;","x_google_ignoreList":[0]}
@@ -1,4 +1,4 @@
1
- import { a6 as o, j as t } from "./index--Q6orQkb.mjs";
1
+ import { a6 as o, j as t } from "./index-DIicyWvr.mjs";
2
2
  /**
3
3
  * @license lucide-react v0.553.0 - ISC
4
4
  *
@@ -16,4 +16,4 @@ export {
16
16
  e as R,
17
17
  h as f
18
18
  };
19
- //# sourceMappingURL=avatar-flipboard-C10JfFS_.mjs.map
19
+ //# sourceMappingURL=avatar-flipboard-D12yCmyH.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"avatar-flipboard-C10JfFS_.mjs","sources":["../../../node_modules/lucide-react/dist/esm/icons/repeat.js","../src/components/layout/onboarding/components/header.tsx","../src/assets/images/onboarding/avatar-flipboard.png"],"sourcesContent":["/**\n * @license lucide-react v0.553.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: \"m17 2 4 4-4 4\", key: \"nntrym\" }],\n [\"path\", { d: \"M3 11v-1a4 4 0 0 1 4-4h14\", key: \"84bu3i\" }],\n [\"path\", { d: \"m7 22-4-4 4-4\", key: \"1wqhfi\" }],\n [\"path\", { d: \"M21 13v1a4 4 0 0 1-4 4H3\", key: \"1rx37r\" }]\n];\nconst Repeat = createLucideIcon(\"repeat\", __iconNode);\n\nexport { __iconNode, Repeat as default };\n//# sourceMappingURL=repeat.js.map\n","import React, {ReactNode} from 'react';\n\nconst Header:React.FC<{children?: ReactNode}> = ({children}) => {\n return (\n <div className='flex w-full justify-between'>\n {children}\n </div>\n );\n};\n\nexport default Header;\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAHgSURBVHgB7dxBTgIxGMXx13E0BEVWSDiBXoANXoCb6HF0p2fiGkQTNkoCimGYsR2JO33ptxim4f02xkQS/CtN+tHi1jfXFeRPGeRfCkQoEKFAhAIRCkQoEKFAhAIRCkQoEKFARA6LzHddLlFtNoBzaLWqgut0gH4fKEvEsgXycfK7e2TjMVAUaLU8RzmboXh+Ano9xDIFCv85IU4+nSIF4U9YPj4gMwSyrUHhVbXbIhnF1j9l21KgRZpQIEKBCAUiFIhQIEKBCAUiFIhQIOI4Ajn7r2nbzR+CH1uUi4XfA+6iHobMoVqt6q8W6QTyc6fP2wmq+Tx6BuW6XbjRKD4uUgrkucEAzs93TEM6Q5xAizShQIQCEQpEKBChQIQCEQpEKBChQIQCEc0HMhwg+JU1/3Qb36yGkcXHZIJseBX1uHpc8bZs/DRJ87t5P9fB6wtwdopoBzhqc7hxR9vPFe1pkSYUiFAgQoEIBSIUiFAgQoEIBSIUiLAFCjftTwx7Ka9+Z7RM56q+aS8W7j7Ux/vDN0XEgfKw/1qvgYtzpMKZPnmhvszyjmrzFb/p9D/vhsP23/HYs+3mw9CrdwkXf/XhRyJxAi3ShAIRCkQoEKFAhAIRCkQoEKFAhAIRCkQoEPENOBxXkSLnWXkAAAAASUVORK5CYII=\""],"names":["__iconNode","Repeat","createLucideIcon","Header","children","jsx","flipboardAvatar"],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,GAAG,iBAAiB,KAAK,SAAQ,CAAE;AAAA,EAC9C,CAAC,QAAQ,EAAE,GAAG,6BAA6B,KAAK,SAAQ,CAAE;AAAA,EAC1D,CAAC,QAAQ,EAAE,GAAG,iBAAiB,KAAK,SAAQ,CAAE;AAAA,EAC9C,CAAC,QAAQ,EAAE,GAAG,4BAA4B,KAAK,SAAQ,CAAE;AAC3D,GACMC,IAASC,EAAiB,UAAUF,CAAU,GCb9CG,IAA0C,CAAC,EAAC,UAAAC,QAE1CC,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,+BACV,UAAAD,EAAA,CACL,GCNRE,IAAe;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"avatar-flipboard-D12yCmyH.mjs","sources":["../../../node_modules/lucide-react/dist/esm/icons/repeat.js","../src/components/layout/onboarding/components/header.tsx","../src/assets/images/onboarding/avatar-flipboard.png"],"sourcesContent":["/**\n * @license lucide-react v0.553.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: \"m17 2 4 4-4 4\", key: \"nntrym\" }],\n [\"path\", { d: \"M3 11v-1a4 4 0 0 1 4-4h14\", key: \"84bu3i\" }],\n [\"path\", { d: \"m7 22-4-4 4-4\", key: \"1wqhfi\" }],\n [\"path\", { d: \"M21 13v1a4 4 0 0 1-4 4H3\", key: \"1rx37r\" }]\n];\nconst Repeat = createLucideIcon(\"repeat\", __iconNode);\n\nexport { __iconNode, Repeat as default };\n//# sourceMappingURL=repeat.js.map\n","import React, {ReactNode} from 'react';\n\nconst Header:React.FC<{children?: ReactNode}> = ({children}) => {\n return (\n <div className='flex w-full justify-between'>\n {children}\n </div>\n );\n};\n\nexport default Header;\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAHgSURBVHgB7dxBTgIxGMXx13E0BEVWSDiBXoANXoCb6HF0p2fiGkQTNkoCimGYsR2JO33ptxim4f02xkQS/CtN+tHi1jfXFeRPGeRfCkQoEKFAhAIRCkQoEKFAhAIRCkQoEKFARA6LzHddLlFtNoBzaLWqgut0gH4fKEvEsgXycfK7e2TjMVAUaLU8RzmboXh+Ano9xDIFCv85IU4+nSIF4U9YPj4gMwSyrUHhVbXbIhnF1j9l21KgRZpQIEKBCAUiFIhQIEKBCAUiFIhQIOI4Ajn7r2nbzR+CH1uUi4XfA+6iHobMoVqt6q8W6QTyc6fP2wmq+Tx6BuW6XbjRKD4uUgrkucEAzs93TEM6Q5xAizShQIQCEQpEKBChQIQCEQpEKBChQIQCEc0HMhwg+JU1/3Qb36yGkcXHZIJseBX1uHpc8bZs/DRJ87t5P9fB6wtwdopoBzhqc7hxR9vPFe1pkSYUiFAgQoEIBSIUiFAgQoEIBSIUiLAFCjftTwx7Ka9+Z7RM56q+aS8W7j7Ux/vDN0XEgfKw/1qvgYtzpMKZPnmhvszyjmrzFb/p9D/vhsP23/HYs+3mw9CrdwkXf/XhRyJxAi3ShAIRCkQoEKFAhAIRCkQoEKFAhAIRCkQoEPENOBxXkSLnWXkAAAAASUVORK5CYII=\""],"names":["__iconNode","Repeat","createLucideIcon","Header","children","jsx","flipboardAvatar"],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,GAAG,iBAAiB,KAAK,SAAQ,CAAE;AAAA,EAC9C,CAAC,QAAQ,EAAE,GAAG,6BAA6B,KAAK,SAAQ,CAAE;AAAA,EAC1D,CAAC,QAAQ,EAAE,GAAG,iBAAiB,KAAK,SAAQ,CAAE;AAAA,EAC9C,CAAC,QAAQ,EAAE,GAAG,4BAA4B,KAAK,SAAQ,CAAE;AAC3D,GACMC,IAASC,EAAiB,UAAUF,CAAU,GCb9CG,IAA0C,CAAC,EAAC,UAAAC,QAE1CC,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,+BACV,UAAAD,EAAA,CACL,GCNRE,IAAe;","x_google_ignoreList":[0]}
@@ -1,6 +1,6 @@
1
- import { Q as F, b as i, c as H, T as z, U as I, V as M, W as T, e as O, O as o, j as e, L as y, I as j, k as x, B as n, D as U, m as L, n as R, o as P, p as _, A as S, X as Y, Y as W, q as V, Z, _ as X, $, a0 as q, a1 as Q, a2 as G, a3 as J, a4 as K, a5 as ee } from "./index--Q6orQkb.mjs";
2
- import { E as se } from "./edit-profile-CYh00FZ7.mjs";
3
- import { C as ae } from "./copy-C1fElSkQ.mjs";
1
+ import { Q as F, b as i, c as H, T as z, U as I, V as M, W as T, e as O, O as o, j as e, L as y, I as j, k as x, B as n, D as U, m as L, n as R, o as P, p as _, A as S, X as Y, Y as W, q as V, Z, _ as X, $, a0 as q, a1 as Q, a2 as G, a3 as J, a4 as K, a5 as ee } from "./index-DIicyWvr.mjs";
2
+ import { E as se } from "./edit-profile-DdCJ6UkE.mjs";
3
+ import { C as ae } from "./copy-DCHXVz-9.mjs";
4
4
  const re = 5e3, le = 12, de = () => {
5
5
  var p;
6
6
  const { data: s, isLoading: b } = F("index", "me"), [t, a] = i(() => (s == null ? void 0 : s.blueskyEnabled) && !(s != null && s.blueskyHandleConfirmed)), [v, m] = i(!1), [k, c] = i(!1), [w, h] = i(!1), [C, d] = i(!1), l = H(0), N = z("index"), u = I("index"), B = M("index"), A = async () => {
@@ -147,4 +147,4 @@ const re = 5e3, le = 12, de = () => {
147
147
  export {
148
148
  de as default
149
149
  };
150
- //# sourceMappingURL=bluesky-sharing-C1xeGSL6.mjs.map
150
+ //# sourceMappingURL=bluesky-sharing-D65sfQFX.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"bluesky-sharing-C1xeGSL6.mjs","sources":["../src/views/preferences/components/bluesky-sharing.tsx"],"sourcesContent":["import APAvatar from '@src/components/global/ap-avatar';\nimport EditProfile from '@src/views/preferences/components/edit-profile';\nimport Layout from '@src/components/layout';\nimport React, {useCallback, useEffect, useRef, useState} from 'react';\nimport {AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n Button,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n H2,\n H3,\n LoadingIndicator,\n LucideIcon,\n buttonVariants} from '@tryghost/shade';\nimport {toast} from 'sonner';\nimport {useAccountForUser, useConfirmBlueskyHandleMutationForUser, useDisableBlueskyMutationForUser, useEnableBlueskyMutationForUser} from '@hooks/use-activity-pub-queries';\n\nconst CONFIRMATION_INTERVAL = 5000;\nconst MAX_CONFIRMATION_RETRIES = 12;\n\nconst BlueskySharing: React.FC = () => {\n const {data: account, isLoading: isLoadingAccount} = useAccountForUser('index', 'me');\n const [loading, setLoading] = useState(() => account?.blueskyEnabled && !account?.blueskyHandleConfirmed);\n const [copied, setCopied] = useState(false);\n const [isEditingProfile, setIsEditingProfile] = useState(false);\n const [showConfirm, setShowConfirm] = useState(false);\n const [handleConfirmed, setHandleConfirmed] = useState(false);\n const retryCountRef = useRef(0);\n const enableBlueskyMutation = useEnableBlueskyMutationForUser('index');\n const disableBlueskyMutation = useDisableBlueskyMutationForUser('index');\n const confirmBlueskyHandleMutation = useConfirmBlueskyHandleMutationForUser('index');\n\n const handleCopy = async () => {\n setCopied(true);\n await navigator.clipboard.writeText(account?.blueskyHandle || '');\n setTimeout(() => setCopied(false), 2000);\n };\n\n const handleEnable = async () => {\n if (!account?.avatarUrl) {\n setIsEditingProfile(true);\n } else {\n setLoading(true);\n try {\n await enableBlueskyMutation.mutateAsync();\n } catch {\n setLoading(false);\n toast.error('Something went wrong, please try again.');\n }\n }\n };\n\n const handleDisable = async () => {\n setLoading(true);\n try {\n await disableBlueskyMutation.mutateAsync();\n setShowConfirm(false);\n toast.success('Bluesky sharing disabled');\n } finally {\n setLoading(false);\n }\n };\n\n const confirmHandle = useCallback(() => {\n confirmBlueskyHandleMutation.mutateAsync().then((handle) => {\n if (handle) {\n setHandleConfirmed(true);\n }\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []); // Empty deps - mutations are stable in practice\n\n useEffect(() => {\n if (!account?.blueskyEnabled) {\n setHandleConfirmed(false);\n setLoading(false);\n retryCountRef.current = 0;\n\n return;\n }\n\n if (account?.blueskyHandleConfirmed) {\n setHandleConfirmed(true);\n setLoading(false);\n\n // Only show toast on first confirmation\n if (retryCountRef.current > 0) {\n toast.success('Bluesky sharing enabled');\n }\n retryCountRef.current = 0;\n\n return;\n }\n\n setHandleConfirmed(false);\n setLoading(true);\n retryCountRef.current = 0;\n\n const confirmHandleInterval = setInterval(async () => {\n retryCountRef.current += 1;\n\n if (retryCountRef.current > MAX_CONFIRMATION_RETRIES) {\n clearInterval(confirmHandleInterval);\n\n toast.error('Something went wrong, please try again.');\n\n await disableBlueskyMutation.mutateAsync();\n setLoading(false);\n\n return;\n }\n\n confirmHandle();\n }, CONFIRMATION_INTERVAL);\n\n return () => clearInterval(confirmHandleInterval);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [account?.blueskyEnabled, account?.blueskyHandleConfirmed, confirmHandle]); // disableBlueskyMutation is stable\n\n if (isLoadingAccount) {\n return (\n <Layout>\n <div className='mx-auto max-w-[620px] py-[min(4vh,48px)]'>\n <div className='flex items-center justify-between gap-8'>\n <H2>Bluesky sharing</H2>\n </div>\n <div className='mt-6 flex justify-center'>\n <LoadingIndicator size='md' />\n </div>\n </div>\n </Layout>\n );\n }\n\n const showAsEnabled = account?.blueskyEnabled && account?.blueskyHandleConfirmed;\n\n return (\n <Layout>\n <div className='mx-auto max-w-[620px] py-[min(4vh,48px)]'>\n <div className='flex items-center justify-between gap-8'>\n <H2>Bluesky sharing</H2>\n {showAsEnabled && <Button className='group w-24 translate-y-1 px-2 hover:!bg-red/5 hover:text-red' size='default' variant='outline' onClick={() => setShowConfirm(true)}>\n <span className='size-2 rounded-full bg-green group-hover:hidden'></span>\n <span className='group-hover:hidden'>Enabled</span>\n <span className='hidden group-hover:!visible group-hover:!inline'>Disable</span>\n </Button>}\n </div>\n {!showAsEnabled ?\n <div className='mt-3 flex flex-col gap-5'>\n <p className='text-base'>{!account?.avatarUrl ?\n 'Add a profile image to connect to Bluesky. Profile pictures help prevent spam.' :\n <>Connect your account to <a className=\"text-purple hover:text-purple-600\" href=\"https://fed.brid.gy\" rel=\"noreferrer\" target=\"_blank\">Bridgy Fed</a> to share content directly to a dedicated Bluesky profile and increase your reach across the social web.</>\n }</p>\n <p className='-mt-2 text-base'>You can&apos;t change your Bluesky username, so make sure you&apos;re happy with your current social web handle before connecting.</p>\n {!account?.avatarUrl ? (\n <Dialog open={isEditingProfile} onOpenChange={setIsEditingProfile}>\n <DialogTrigger>\n <Button className='h-10 w-full text-base' variant='secondary'>Edit profile</Button>\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 <>\n <Button className='h-10 text-base' disabled={loading} variant='secondary' onClick={handleEnable}>\n {!loading ?\n <><svg height=\"32\" role=\"img\" viewBox=\"0 0 24 24\" width=\"32\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12 10.8c-1.087 -2.114 -4.046 -6.053 -6.798 -7.995C2.566 0.944 1.561 1.266 0.902 1.565 0.139 1.908 0 3.08 0 3.768c0 0.69 0.378 5.65 0.624 6.479 0.815 2.736 3.713 3.66 6.383 3.364 0.136 -0.02 0.275 -0.039 0.415 -0.056 -0.138 0.022 -0.276 0.04 -0.415 0.056 -3.912 0.58 -7.387 2.005 -2.83 7.078 5.013 5.19 6.87 -1.113 7.823 -4.308 0.953 3.195 2.05 9.271 7.733 4.308 4.267 -4.308 1.172 -6.498 -2.74 -7.078a8.741 8.741 0 0 1 -0.415 -0.056c0.14 0.017 0.279 0.036 0.415 0.056 2.67 0.297 5.568 -0.628 6.383 -3.364 0.246 -0.828 0.624 -5.79 0.624 -6.478 0 -0.69 -0.139 -1.861 -0.902 -2.206 -0.659 -0.298 -1.664 -0.62 -4.3 1.24C16.046 4.748 13.087 8.687 12 10.8Z\" fill=\"#0385FF\" strokeWidth=\"1\"></path></svg>\n Enable Bluesky sharing</> :\n <div className='flex items-center gap-2'>\n <LoadingIndicator size='sm' />\n <span>Enabling Bluesky sharing...</span>\n </div>\n }\n </Button>\n {loading && (\n <p className='-mt-2 text-center text-sm text-gray-700 dark:text-gray-600'>You can leave this page and come back to check the status.</p>\n )}\n </>\n )}\n </div> :\n <>\n <p className='mt-2 pr-32 text-base'>Your social web profile is now connected to Bluesky, via <a className=\"text-purple hover:text-purple-600\" href=\"https://fed.brid.gy\" rel=\"noreferrer\" target=\"_blank\">Bridgy Fed</a>. Posts are automatically synced after a short delay to complete activation.</p>\n {handleConfirmed && (\n <div className='mt-6 flex flex-col items-center gap-4 rounded-lg border border-gray-200 p-8 dark:border-gray-950'>\n <div className='relative'>\n <APAvatar\n author={\n {\n icon: {\n url: account?.avatarUrl || ''\n },\n name: account?.name || '',\n handle: account?.handle || ''\n }\n }\n size='md'\n />\n <div className='absolute bottom-0 right-0 z-10 flex size-6 items-center justify-center rounded-full bg-white shadow-xs'>\n <svg height=\"14\" role=\"img\" viewBox=\"0 0 24 24\" width=\"14\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12 10.8c-1.087 -2.114 -4.046 -6.053 -6.798 -7.995C2.566 0.944 1.561 1.266 0.902 1.565 0.139 1.908 0 3.08 0 3.768c0 0.69 0.378 5.65 0.624 6.479 0.815 2.736 3.713 3.66 6.383 3.364 0.136 -0.02 0.275 -0.039 0.415 -0.056 -0.138 0.022 -0.276 0.04 -0.415 0.056 -3.912 0.58 -7.387 2.005 -2.83 7.078 5.013 5.19 6.87 -1.113 7.823 -4.308 0.953 3.195 2.05 9.271 7.733 4.308 4.267 -4.308 1.172 -6.498 -2.74 -7.078a8.741 8.741 0 0 1 -0.415 -0.056c0.14 0.017 0.279 0.036 0.415 0.056 2.67 0.297 5.568 -0.628 6.383 -3.364 0.246 -0.828 0.624 -5.79 0.624 -6.478 0 -0.69 -0.139 -1.861 -0.902 -2.206 -0.659 -0.298 -1.664 -0.62 -4.3 1.24C16.046 4.748 13.087 8.687 12 10.8Z\" fill=\"#0385FF\" strokeWidth=\"1\"></path></svg>\n </div>\n </div>\n <div className='flex grow flex-col items-center'>\n <H3>{account?.name || ''}</H3>\n <div className='flex items-center gap-1 text-gray-800'>\n <span className='text-lg font-medium'>{account?.blueskyHandle}</span>\n <Button className='size-6 p-0 hover:opacity-80' title='Copy handle' variant='link' onClick={handleCopy}>\n {!copied ?\n <LucideIcon.Copy size={16} /> :\n <LucideIcon.Check size={16} />\n }\n </Button>\n </div>\n </div>\n <Button className='mt-2 w-full' size='lg' variant='secondary' asChild>\n <a href={`https://bsky.app/profile/${account?.blueskyHandle?.replace(/^@/, '')}`} rel='noreferrer' target='_blank'>\n Open profile\n <LucideIcon.ExternalLink size={14} strokeWidth={1.25} />\n </a>\n </Button>\n </div>\n )}\n </>\n }\n </div>\n\n <AlertDialog open={showConfirm} onOpenChange={setShowConfirm}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>\n Disable Bluesky sharing?\n </AlertDialogTitle>\n <AlertDialogDescription>\n Your bridged Bluesky account will be deactivated and your content will no longer be shared on Bluesky. You can re-enable sharing at any time.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>\n Cancel\n </AlertDialogCancel>\n <AlertDialogAction\n className={buttonVariants({variant: 'destructive'})}\n disabled={loading}\n onClick={(e) => {\n e.preventDefault();\n handleDisable();\n }}\n >\n {loading ? <LoadingIndicator color='light' size='sm' /> : 'Disable'}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </Layout>\n );\n};\n\nexport default BlueskySharing;\n"],"names":["CONFIRMATION_INTERVAL","MAX_CONFIRMATION_RETRIES","BlueskySharing","account","isLoadingAccount","useAccountForUser","loading","setLoading","useState","copied","setCopied","isEditingProfile","setIsEditingProfile","showConfirm","setShowConfirm","handleConfirmed","setHandleConfirmed","retryCountRef","useRef","enableBlueskyMutation","useEnableBlueskyMutationForUser","disableBlueskyMutation","useDisableBlueskyMutationForUser","confirmBlueskyHandleMutation","useConfirmBlueskyHandleMutationForUser","handleCopy","handleEnable","toast","handleDisable","confirmHandle","useCallback","handle","useEffect","confirmHandleInterval","jsx","Layout","jsxs","H2","LoadingIndicator","showAsEnabled","Button","Fragment","APAvatar","H3","LucideIcon.Check","LucideIcon.Copy","_a","LucideIcon.ExternalLink","Dialog","DialogTrigger","DialogContent","e","DialogHeader","DialogTitle","EditProfile","AlertDialog","AlertDialogContent","AlertDialogHeader","AlertDialogTitle","AlertDialogDescription","AlertDialogFooter","AlertDialogCancel","AlertDialogAction","buttonVariants"],"mappings":"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"}
1
+ {"version":3,"file":"bluesky-sharing-D65sfQFX.mjs","sources":["../src/views/preferences/components/bluesky-sharing.tsx"],"sourcesContent":["import APAvatar from '@src/components/global/ap-avatar';\nimport EditProfile from '@src/views/preferences/components/edit-profile';\nimport Layout from '@src/components/layout';\nimport React, {useCallback, useEffect, useRef, useState} from 'react';\nimport {AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n Button,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n H2,\n H3,\n LoadingIndicator,\n LucideIcon,\n buttonVariants} from '@tryghost/shade';\nimport {toast} from 'sonner';\nimport {useAccountForUser, useConfirmBlueskyHandleMutationForUser, useDisableBlueskyMutationForUser, useEnableBlueskyMutationForUser} from '@hooks/use-activity-pub-queries';\n\nconst CONFIRMATION_INTERVAL = 5000;\nconst MAX_CONFIRMATION_RETRIES = 12;\n\nconst BlueskySharing: React.FC = () => {\n const {data: account, isLoading: isLoadingAccount} = useAccountForUser('index', 'me');\n const [loading, setLoading] = useState(() => account?.blueskyEnabled && !account?.blueskyHandleConfirmed);\n const [copied, setCopied] = useState(false);\n const [isEditingProfile, setIsEditingProfile] = useState(false);\n const [showConfirm, setShowConfirm] = useState(false);\n const [handleConfirmed, setHandleConfirmed] = useState(false);\n const retryCountRef = useRef(0);\n const enableBlueskyMutation = useEnableBlueskyMutationForUser('index');\n const disableBlueskyMutation = useDisableBlueskyMutationForUser('index');\n const confirmBlueskyHandleMutation = useConfirmBlueskyHandleMutationForUser('index');\n\n const handleCopy = async () => {\n setCopied(true);\n await navigator.clipboard.writeText(account?.blueskyHandle || '');\n setTimeout(() => setCopied(false), 2000);\n };\n\n const handleEnable = async () => {\n if (!account?.avatarUrl) {\n setIsEditingProfile(true);\n } else {\n setLoading(true);\n try {\n await enableBlueskyMutation.mutateAsync();\n } catch {\n setLoading(false);\n toast.error('Something went wrong, please try again.');\n }\n }\n };\n\n const handleDisable = async () => {\n setLoading(true);\n try {\n await disableBlueskyMutation.mutateAsync();\n setShowConfirm(false);\n toast.success('Bluesky sharing disabled');\n } finally {\n setLoading(false);\n }\n };\n\n const confirmHandle = useCallback(() => {\n confirmBlueskyHandleMutation.mutateAsync().then((handle) => {\n if (handle) {\n setHandleConfirmed(true);\n }\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []); // Empty deps - mutations are stable in practice\n\n useEffect(() => {\n if (!account?.blueskyEnabled) {\n setHandleConfirmed(false);\n setLoading(false);\n retryCountRef.current = 0;\n\n return;\n }\n\n if (account?.blueskyHandleConfirmed) {\n setHandleConfirmed(true);\n setLoading(false);\n\n // Only show toast on first confirmation\n if (retryCountRef.current > 0) {\n toast.success('Bluesky sharing enabled');\n }\n retryCountRef.current = 0;\n\n return;\n }\n\n setHandleConfirmed(false);\n setLoading(true);\n retryCountRef.current = 0;\n\n const confirmHandleInterval = setInterval(async () => {\n retryCountRef.current += 1;\n\n if (retryCountRef.current > MAX_CONFIRMATION_RETRIES) {\n clearInterval(confirmHandleInterval);\n\n toast.error('Something went wrong, please try again.');\n\n await disableBlueskyMutation.mutateAsync();\n setLoading(false);\n\n return;\n }\n\n confirmHandle();\n }, CONFIRMATION_INTERVAL);\n\n return () => clearInterval(confirmHandleInterval);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [account?.blueskyEnabled, account?.blueskyHandleConfirmed, confirmHandle]); // disableBlueskyMutation is stable\n\n if (isLoadingAccount) {\n return (\n <Layout>\n <div className='mx-auto max-w-[620px] py-[min(4vh,48px)]'>\n <div className='flex items-center justify-between gap-8'>\n <H2>Bluesky sharing</H2>\n </div>\n <div className='mt-6 flex justify-center'>\n <LoadingIndicator size='md' />\n </div>\n </div>\n </Layout>\n );\n }\n\n const showAsEnabled = account?.blueskyEnabled && account?.blueskyHandleConfirmed;\n\n return (\n <Layout>\n <div className='mx-auto max-w-[620px] py-[min(4vh,48px)]'>\n <div className='flex items-center justify-between gap-8'>\n <H2>Bluesky sharing</H2>\n {showAsEnabled && <Button className='group w-24 translate-y-1 px-2 hover:!bg-red/5 hover:text-red' size='default' variant='outline' onClick={() => setShowConfirm(true)}>\n <span className='size-2 rounded-full bg-green group-hover:hidden'></span>\n <span className='group-hover:hidden'>Enabled</span>\n <span className='hidden group-hover:!visible group-hover:!inline'>Disable</span>\n </Button>}\n </div>\n {!showAsEnabled ?\n <div className='mt-3 flex flex-col gap-5'>\n <p className='text-base'>{!account?.avatarUrl ?\n 'Add a profile image to connect to Bluesky. Profile pictures help prevent spam.' :\n <>Connect your account to <a className=\"text-purple hover:text-purple-600\" href=\"https://fed.brid.gy\" rel=\"noreferrer\" target=\"_blank\">Bridgy Fed</a> to share content directly to a dedicated Bluesky profile and increase your reach across the social web.</>\n }</p>\n <p className='-mt-2 text-base'>You can&apos;t change your Bluesky username, so make sure you&apos;re happy with your current social web handle before connecting.</p>\n {!account?.avatarUrl ? (\n <Dialog open={isEditingProfile} onOpenChange={setIsEditingProfile}>\n <DialogTrigger>\n <Button className='h-10 w-full text-base' variant='secondary'>Edit profile</Button>\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 <>\n <Button className='h-10 text-base' disabled={loading} variant='secondary' onClick={handleEnable}>\n {!loading ?\n <><svg height=\"32\" role=\"img\" viewBox=\"0 0 24 24\" width=\"32\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12 10.8c-1.087 -2.114 -4.046 -6.053 -6.798 -7.995C2.566 0.944 1.561 1.266 0.902 1.565 0.139 1.908 0 3.08 0 3.768c0 0.69 0.378 5.65 0.624 6.479 0.815 2.736 3.713 3.66 6.383 3.364 0.136 -0.02 0.275 -0.039 0.415 -0.056 -0.138 0.022 -0.276 0.04 -0.415 0.056 -3.912 0.58 -7.387 2.005 -2.83 7.078 5.013 5.19 6.87 -1.113 7.823 -4.308 0.953 3.195 2.05 9.271 7.733 4.308 4.267 -4.308 1.172 -6.498 -2.74 -7.078a8.741 8.741 0 0 1 -0.415 -0.056c0.14 0.017 0.279 0.036 0.415 0.056 2.67 0.297 5.568 -0.628 6.383 -3.364 0.246 -0.828 0.624 -5.79 0.624 -6.478 0 -0.69 -0.139 -1.861 -0.902 -2.206 -0.659 -0.298 -1.664 -0.62 -4.3 1.24C16.046 4.748 13.087 8.687 12 10.8Z\" fill=\"#0385FF\" strokeWidth=\"1\"></path></svg>\n Enable Bluesky sharing</> :\n <div className='flex items-center gap-2'>\n <LoadingIndicator size='sm' />\n <span>Enabling Bluesky sharing...</span>\n </div>\n }\n </Button>\n {loading && (\n <p className='-mt-2 text-center text-sm text-gray-700 dark:text-gray-600'>You can leave this page and come back to check the status.</p>\n )}\n </>\n )}\n </div> :\n <>\n <p className='mt-2 pr-32 text-base'>Your social web profile is now connected to Bluesky, via <a className=\"text-purple hover:text-purple-600\" href=\"https://fed.brid.gy\" rel=\"noreferrer\" target=\"_blank\">Bridgy Fed</a>. Posts are automatically synced after a short delay to complete activation.</p>\n {handleConfirmed && (\n <div className='mt-6 flex flex-col items-center gap-4 rounded-lg border border-gray-200 p-8 dark:border-gray-950'>\n <div className='relative'>\n <APAvatar\n author={\n {\n icon: {\n url: account?.avatarUrl || ''\n },\n name: account?.name || '',\n handle: account?.handle || ''\n }\n }\n size='md'\n />\n <div className='absolute bottom-0 right-0 z-10 flex size-6 items-center justify-center rounded-full bg-white shadow-xs'>\n <svg height=\"14\" role=\"img\" viewBox=\"0 0 24 24\" width=\"14\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12 10.8c-1.087 -2.114 -4.046 -6.053 -6.798 -7.995C2.566 0.944 1.561 1.266 0.902 1.565 0.139 1.908 0 3.08 0 3.768c0 0.69 0.378 5.65 0.624 6.479 0.815 2.736 3.713 3.66 6.383 3.364 0.136 -0.02 0.275 -0.039 0.415 -0.056 -0.138 0.022 -0.276 0.04 -0.415 0.056 -3.912 0.58 -7.387 2.005 -2.83 7.078 5.013 5.19 6.87 -1.113 7.823 -4.308 0.953 3.195 2.05 9.271 7.733 4.308 4.267 -4.308 1.172 -6.498 -2.74 -7.078a8.741 8.741 0 0 1 -0.415 -0.056c0.14 0.017 0.279 0.036 0.415 0.056 2.67 0.297 5.568 -0.628 6.383 -3.364 0.246 -0.828 0.624 -5.79 0.624 -6.478 0 -0.69 -0.139 -1.861 -0.902 -2.206 -0.659 -0.298 -1.664 -0.62 -4.3 1.24C16.046 4.748 13.087 8.687 12 10.8Z\" fill=\"#0385FF\" strokeWidth=\"1\"></path></svg>\n </div>\n </div>\n <div className='flex grow flex-col items-center'>\n <H3>{account?.name || ''}</H3>\n <div className='flex items-center gap-1 text-gray-800'>\n <span className='text-lg font-medium'>{account?.blueskyHandle}</span>\n <Button className='size-6 p-0 hover:opacity-80' title='Copy handle' variant='link' onClick={handleCopy}>\n {!copied ?\n <LucideIcon.Copy size={16} /> :\n <LucideIcon.Check size={16} />\n }\n </Button>\n </div>\n </div>\n <Button className='mt-2 w-full' size='lg' variant='secondary' asChild>\n <a href={`https://bsky.app/profile/${account?.blueskyHandle?.replace(/^@/, '')}`} rel='noreferrer' target='_blank'>\n Open profile\n <LucideIcon.ExternalLink size={14} strokeWidth={1.25} />\n </a>\n </Button>\n </div>\n )}\n </>\n }\n </div>\n\n <AlertDialog open={showConfirm} onOpenChange={setShowConfirm}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>\n Disable Bluesky sharing?\n </AlertDialogTitle>\n <AlertDialogDescription>\n Your bridged Bluesky account will be deactivated and your content will no longer be shared on Bluesky. You can re-enable sharing at any time.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>\n Cancel\n </AlertDialogCancel>\n <AlertDialogAction\n className={buttonVariants({variant: 'destructive'})}\n disabled={loading}\n onClick={(e) => {\n e.preventDefault();\n handleDisable();\n }}\n >\n {loading ? <LoadingIndicator color='light' size='sm' /> : 'Disable'}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </Layout>\n );\n};\n\nexport default BlueskySharing;\n"],"names":["CONFIRMATION_INTERVAL","MAX_CONFIRMATION_RETRIES","BlueskySharing","account","isLoadingAccount","useAccountForUser","loading","setLoading","useState","copied","setCopied","isEditingProfile","setIsEditingProfile","showConfirm","setShowConfirm","handleConfirmed","setHandleConfirmed","retryCountRef","useRef","enableBlueskyMutation","useEnableBlueskyMutationForUser","disableBlueskyMutation","useDisableBlueskyMutationForUser","confirmBlueskyHandleMutation","useConfirmBlueskyHandleMutationForUser","handleCopy","handleEnable","toast","handleDisable","confirmHandle","useCallback","handle","useEffect","confirmHandleInterval","jsx","Layout","jsxs","H2","LoadingIndicator","showAsEnabled","Button","Fragment","APAvatar","H3","LucideIcon.Check","LucideIcon.Copy","_a","LucideIcon.ExternalLink","Dialog","DialogTrigger","DialogContent","e","DialogHeader","DialogTitle","EditProfile","AlertDialog","AlertDialogContent","AlertDialogHeader","AlertDialogTitle","AlertDialogDescription","AlertDialogFooter","AlertDialogCancel","AlertDialogAction","buttonVariants"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { a6 as c } from "./index--Q6orQkb.mjs";
1
+ import { a6 as c } from "./index-DIicyWvr.mjs";
2
2
  /**
3
3
  * @license lucide-react v0.553.0 - ISC
4
4
  *
@@ -12,4 +12,4 @@ const e = [
12
12
  export {
13
13
  t as C
14
14
  };
15
- //# sourceMappingURL=copy-C1fElSkQ.mjs.map
15
+ //# sourceMappingURL=copy-DCHXVz-9.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"copy-C1fElSkQ.mjs","sources":["../../../node_modules/lucide-react/dist/esm/icons/copy.js"],"sourcesContent":["/**\n * @license lucide-react v0.553.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 [\"rect\", { width: \"14\", height: \"14\", x: \"8\", y: \"8\", rx: \"2\", ry: \"2\", key: \"17jyea\" }],\n [\"path\", { d: \"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\", key: \"zix9uf\" }]\n];\nconst Copy = createLucideIcon(\"copy\", __iconNode);\n\nexport { __iconNode, Copy as default };\n//# sourceMappingURL=copy.js.map\n"],"names":["__iconNode","Copy","createLucideIcon"],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,OAAO,MAAM,QAAQ,MAAM,GAAG,KAAK,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,UAAU;AAAA,EACvF,CAAC,QAAQ,EAAE,GAAG,2DAA2D,KAAK,SAAQ,CAAE;AAC1F,GACMC,IAAOC,EAAiB,QAAQF,CAAU;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"copy-DCHXVz-9.mjs","sources":["../../../node_modules/lucide-react/dist/esm/icons/copy.js"],"sourcesContent":["/**\n * @license lucide-react v0.553.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 [\"rect\", { width: \"14\", height: \"14\", x: \"8\", y: \"8\", rx: \"2\", ry: \"2\", key: \"17jyea\" }],\n [\"path\", { d: \"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\", key: \"zix9uf\" }]\n];\nconst Copy = createLucideIcon(\"copy\", __iconNode);\n\nexport { __iconNode, Copy as default };\n//# sourceMappingURL=copy.js.map\n"],"names":["__iconNode","Copy","createLucideIcon"],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,OAAO,MAAM,QAAQ,MAAM,GAAG,KAAK,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,UAAU;AAAA,EACvF,CAAC,QAAQ,EAAE,GAAG,2DAA2D,KAAK,SAAQ,CAAE;AAC1F,GACMC,IAAOC,EAAiB,QAAQF,CAAU;","x_google_ignoreList":[0]}
@@ -1,4 +1,4 @@
1
- import { a6 as v, c as w, j as e, B as y, k as N, aJ as b, aK as p, au as M, b as R, g as S, A as T, ap as k } from "./index--Q6orQkb.mjs";
1
+ import { a6 as v, c as w, j as e, B as y, k as N, aK as b, aL as p, av as M, b as R, g as S, A as T, aq as k } from "./index-DIicyWvr.mjs";
2
2
  /**
3
3
  * @license lucide-react v0.553.0 - ISC
4
4
  *
@@ -9,7 +9,7 @@ const A = [
9
9
  ["path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6", key: "miytrc" }],
10
10
  ["path", { d: "M3 6h18", key: "d0wm0j" }],
11
11
  ["path", { d: "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2", key: "e791ji" }]
12
- ], z = v("trash", A), P = ({ count: t, onClick: r, variant: o = "default", preserveScroll: a = !0, loading: d = !1 }) => {
12
+ ], L = v("trash", A), P = ({ count: t, onClick: r, variant: o = "default", preserveScroll: a = !0, loading: d = !1 }) => {
13
13
  const i = w(null), c = () => {
14
14
  if (t && t > 0)
15
15
  return `Show ${t} more ${t === 1 ? "reply" : "replies"}`;
@@ -119,7 +119,7 @@ const C = ({
119
119
  ] });
120
120
  }, U = ({ last: t }) => /* @__PURE__ */ e.jsxs("div", { className: "relative mt-[-5px] py-5", children: [
121
121
  /* @__PURE__ */ e.jsxs("div", { className: "flex h-12 grow items-center gap-2 rounded-lg border border-gray-200 p-2 px-[10px] text-gray-600", children: [
122
- /* @__PURE__ */ e.jsx(z, { size: 18, strokeWidth: 1.25 }),
122
+ /* @__PURE__ */ e.jsx(L, { size: 18, strokeWidth: 1.25 }),
123
123
  "This post has been deleted"
124
124
  ] }),
125
125
  !t && /* @__PURE__ */ e.jsx("div", { className: "absolute bottom-0 left-[18px] top-[70px] z-0 mb-[-13px] w-[2px] rounded-sm bg-gray-200" })
@@ -130,4 +130,4 @@ export {
130
130
  P as S,
131
131
  B as u
132
132
  };
133
- //# sourceMappingURL=deleted-feed-item-Bun4tY2_.mjs.map
133
+ //# sourceMappingURL=deleted-feed-item-BkXeOOSC.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"deleted-feed-item-Bun4tY2_.mjs","sources":["../../../node_modules/lucide-react/dist/esm/icons/trash.js","../src/components/global/show-replies-button.tsx","../src/hooks/use-reply-chain-data.ts","../src/components/global/ap-reply-box.tsx","../src/components/feed/deleted-feed-item.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.553.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: \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", key: \"miytrc\" }],\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", key: \"e791ji\" }]\n];\nconst Trash = createLucideIcon(\"trash\", __iconNode);\n\nexport { __iconNode, Trash as default };\n//# sourceMappingURL=trash.js.map\n","import React, {useRef} from 'react';\nimport {Button, LoadingIndicator} from '@tryghost/shade';\n\ninterface ShowRepliesButtonProps {\n count?: number;\n onClick: () => void;\n variant?: 'default' | 'expand' | 'loadMore';\n preserveScroll?: boolean;\n loading?: boolean;\n}\n\nconst ShowRepliesButton: React.FC<ShowRepliesButtonProps> = ({count, onClick, variant = 'default', preserveScroll = true, loading = false}) => {\n const buttonRef = useRef<HTMLDivElement>(null);\n\n const getButtonText = () => {\n if (count && count > 0) {\n return `Show ${count} more ${count === 1 ? 'reply' : 'replies'}`;\n }\n\n switch (variant) {\n case 'expand':\n return 'Show replies';\n case 'loadMore':\n return 'Show more replies';\n default:\n return 'Show replies';\n }\n };\n\n const handleClick = () => {\n if (preserveScroll) {\n const container = document.querySelector('[data-scrollable-container]') as HTMLElement;\n const scrollTop = container ? container.scrollTop : window.scrollY;\n\n onClick();\n\n setTimeout(() => {\n if (container) {\n container.scrollTop = scrollTop;\n } else {\n window.scrollTo(0, scrollTop);\n }\n }, 0);\n } else {\n onClick();\n }\n };\n\n return (\n <div ref={buttonRef} className='mt-[-7px] flex items-center pb-3'>\n <div className='flex w-10 flex-col items-center justify-center gap-1'>\n <div className='size-0.5 rounded-sm bg-gray-300'></div>\n <div className='size-0.5 rounded-sm bg-gray-300'></div>\n <div className='size-0.5 rounded-sm bg-gray-300'></div>\n </div>\n <Button\n className='hover:text-blue-800 text-sm font-medium text-blue-600'\n variant=\"ghost\"\n onClick={(e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n e.stopPropagation();\n (e.target as HTMLElement).blur();\n handleClick();\n }}\n >\n {loading ? (\n <div className='flex items-center gap-2'>\n <LoadingIndicator size='sm' />\n <span>Loading...</span>\n </div>\n ) : (\n getButtonText()\n )}\n </Button>\n </div>\n );\n};\n\nexport default ShowRepliesButton;\n","import {mapPostToActivity} from '@src/utils/posts';\nimport {useReplyChainForUser} from '@hooks/use-activity-pub-queries';\n\ninterface UseReplyChainDataOptions {\n includeAncestors?: boolean;\n}\n\nexport function useReplyChainData(postId: string, options: UseReplyChainDataOptions = {}) {\n const {includeAncestors = false} = options;\n\n const {data: replyChain, isLoading: isReplyChainLoading, loadMoreChildren, loadMoreChildReplies, hasMoreChildren, hasMoreChildReplies} = useReplyChainForUser('index', postId);\n\n const threadParents = includeAncestors ? (replyChain?.ancestors?.chain?.map(mapPostToActivity) || []) : [];\n const threadPost = replyChain?.post ? mapPostToActivity(replyChain.post) : undefined;\n const processedReplies = (replyChain?.children ?? []).map((childData) => {\n const mainReply = mapPostToActivity(childData.post);\n const chainItems = childData.chain ? childData.chain.map(mapPostToActivity) : [];\n\n return {\n mainReply,\n chain: chainItems\n };\n });\n\n return {\n threadParents,\n post: threadPost,\n processedReplies,\n isLoading: isReplyChainLoading,\n loadMoreChildren,\n loadMoreChildReplies,\n hasMoreChildren,\n hasMoreChildReplies\n };\n}\n","import React, {HTMLProps, useState} from 'react';\n\nimport APAvatar from './ap-avatar';\nimport NewNoteModal from '@components/modals/new-note-modal';\nimport getUsername from '../../utils/get-username';\nimport {ActorProperties, ObjectProperties} from '@tryghost/admin-x-framework/api/activitypub';\nimport {useUserDataForUser} from '@hooks/use-activity-pub-queries';\n\nexport interface APTextAreaProps extends HTMLProps<HTMLDivElement> {\n object: ObjectProperties;\n onReply?: () => void;\n onReplyError?: () => void;\n}\n\nconst APReplyBox: React.FC<APTextAreaProps> = ({\n object,\n onReply,\n onReplyError,\n className,\n ...props\n}) => {\n const {data: user} = useUserDataForUser('index');\n const [showReplyModal, setShowReplyModal] = useState(false);\n\n if (!user) {\n return null;\n }\n\n const attributedTo = object.attributedTo as ActorProperties | undefined;\n let placeholder = 'Reply...';\n if (attributedTo?.preferredUsername && attributedTo?.id) {\n placeholder = `Reply to ${getUsername(attributedTo)}...`;\n }\n\n return (\n <>\n <div\n className={`flex w-full cursor-pointer gap-x-3 py-6 ${className || ''}`}\n onClick={() => setShowReplyModal(true)}\n {...props}\n >\n <APAvatar author={user as ActorProperties} />\n <div className='flex w-full items-center'>\n <div className='w-full text-[1.5rem] text-gray-500 transition-colors dark:text-gray-400'>\n {placeholder}\n </div>\n </div>\n </div>\n\n {showReplyModal && (\n <NewNoteModal\n open={showReplyModal}\n replyTo={{\n object: object,\n actor: object.attributedTo as ActorProperties\n }}\n onOpenChange={(open) => {\n setShowReplyModal(open);\n }}\n onReply={() => {\n onReply?.();\n setShowReplyModal(false);\n }}\n onReplyError={() => {\n onReplyError?.();\n }}\n />\n )}\n </>\n );\n};\n\nexport default APReplyBox;\n","import React from 'react';\nimport {LucideIcon} from '@tryghost/shade';\n\ninterface DeletedFeedItemProps {\n last?: boolean;\n}\n\nconst DeletedFeedItem: React.FC<DeletedFeedItemProps> = ({last}) => {\n return (\n <div className='relative mt-[-5px] py-5'>\n <div className='flex h-12 grow items-center gap-2 rounded-lg border border-gray-200 p-2 px-[10px] text-gray-600'>\n <LucideIcon.Trash size={18} strokeWidth={1.25} />\n This post has been deleted\n </div>\n {!last && <div className=\"absolute bottom-0 left-[18px] top-[70px] z-0 mb-[-13px] w-[2px] rounded-sm bg-gray-200\"></div>}\n </div>\n );\n};\n\nexport default DeletedFeedItem;\n"],"names":["__iconNode","Trash","createLucideIcon","ShowRepliesButton","count","onClick","variant","preserveScroll","loading","buttonRef","useRef","getButtonText","handleClick","container","scrollTop","jsxs","jsx","Button","e","LoadingIndicator","useReplyChainData","postId","options","includeAncestors","replyChain","isReplyChainLoading","loadMoreChildren","loadMoreChildReplies","hasMoreChildren","hasMoreChildReplies","useReplyChainForUser","threadParents","_b","_a","mapPostToActivity","threadPost","processedReplies","childData","mainReply","chainItems","APReplyBox","object","onReply","onReplyError","className","props","user","useUserDataForUser","showReplyModal","setShowReplyModal","useState","attributedTo","placeholder","getUsername","Fragment","APAvatar","NewNoteModal","open","DeletedFeedItem","last","LucideIcon.Trash"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"deleted-feed-item-BkXeOOSC.mjs","sources":["../../../node_modules/lucide-react/dist/esm/icons/trash.js","../src/components/global/show-replies-button.tsx","../src/hooks/use-reply-chain-data.ts","../src/components/global/ap-reply-box.tsx","../src/components/feed/deleted-feed-item.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.553.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: \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", key: \"miytrc\" }],\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", key: \"e791ji\" }]\n];\nconst Trash = createLucideIcon(\"trash\", __iconNode);\n\nexport { __iconNode, Trash as default };\n//# sourceMappingURL=trash.js.map\n","import React, {useRef} from 'react';\nimport {Button, LoadingIndicator} from '@tryghost/shade';\n\ninterface ShowRepliesButtonProps {\n count?: number;\n onClick: () => void;\n variant?: 'default' | 'expand' | 'loadMore';\n preserveScroll?: boolean;\n loading?: boolean;\n}\n\nconst ShowRepliesButton: React.FC<ShowRepliesButtonProps> = ({count, onClick, variant = 'default', preserveScroll = true, loading = false}) => {\n const buttonRef = useRef<HTMLDivElement>(null);\n\n const getButtonText = () => {\n if (count && count > 0) {\n return `Show ${count} more ${count === 1 ? 'reply' : 'replies'}`;\n }\n\n switch (variant) {\n case 'expand':\n return 'Show replies';\n case 'loadMore':\n return 'Show more replies';\n default:\n return 'Show replies';\n }\n };\n\n const handleClick = () => {\n if (preserveScroll) {\n const container = document.querySelector('[data-scrollable-container]') as HTMLElement;\n const scrollTop = container ? container.scrollTop : window.scrollY;\n\n onClick();\n\n setTimeout(() => {\n if (container) {\n container.scrollTop = scrollTop;\n } else {\n window.scrollTo(0, scrollTop);\n }\n }, 0);\n } else {\n onClick();\n }\n };\n\n return (\n <div ref={buttonRef} className='mt-[-7px] flex items-center pb-3'>\n <div className='flex w-10 flex-col items-center justify-center gap-1'>\n <div className='size-0.5 rounded-sm bg-gray-300'></div>\n <div className='size-0.5 rounded-sm bg-gray-300'></div>\n <div className='size-0.5 rounded-sm bg-gray-300'></div>\n </div>\n <Button\n className='hover:text-blue-800 text-sm font-medium text-blue-600'\n variant=\"ghost\"\n onClick={(e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n e.stopPropagation();\n (e.target as HTMLElement).blur();\n handleClick();\n }}\n >\n {loading ? (\n <div className='flex items-center gap-2'>\n <LoadingIndicator size='sm' />\n <span>Loading...</span>\n </div>\n ) : (\n getButtonText()\n )}\n </Button>\n </div>\n );\n};\n\nexport default ShowRepliesButton;\n","import {mapPostToActivity} from '@src/utils/posts';\nimport {useReplyChainForUser} from '@hooks/use-activity-pub-queries';\n\ninterface UseReplyChainDataOptions {\n includeAncestors?: boolean;\n}\n\nexport function useReplyChainData(postId: string, options: UseReplyChainDataOptions = {}) {\n const {includeAncestors = false} = options;\n\n const {data: replyChain, isLoading: isReplyChainLoading, loadMoreChildren, loadMoreChildReplies, hasMoreChildren, hasMoreChildReplies} = useReplyChainForUser('index', postId);\n\n const threadParents = includeAncestors ? (replyChain?.ancestors?.chain?.map(mapPostToActivity) || []) : [];\n const threadPost = replyChain?.post ? mapPostToActivity(replyChain.post) : undefined;\n const processedReplies = (replyChain?.children ?? []).map((childData) => {\n const mainReply = mapPostToActivity(childData.post);\n const chainItems = childData.chain ? childData.chain.map(mapPostToActivity) : [];\n\n return {\n mainReply,\n chain: chainItems\n };\n });\n\n return {\n threadParents,\n post: threadPost,\n processedReplies,\n isLoading: isReplyChainLoading,\n loadMoreChildren,\n loadMoreChildReplies,\n hasMoreChildren,\n hasMoreChildReplies\n };\n}\n","import React, {HTMLProps, useState} from 'react';\n\nimport APAvatar from './ap-avatar';\nimport NewNoteModal from '@components/modals/new-note-modal';\nimport getUsername from '../../utils/get-username';\nimport {ActorProperties, ObjectProperties} from '@tryghost/admin-x-framework/api/activitypub';\nimport {useUserDataForUser} from '@hooks/use-activity-pub-queries';\n\nexport interface APTextAreaProps extends HTMLProps<HTMLDivElement> {\n object: ObjectProperties;\n onReply?: () => void;\n onReplyError?: () => void;\n}\n\nconst APReplyBox: React.FC<APTextAreaProps> = ({\n object,\n onReply,\n onReplyError,\n className,\n ...props\n}) => {\n const {data: user} = useUserDataForUser('index');\n const [showReplyModal, setShowReplyModal] = useState(false);\n\n if (!user) {\n return null;\n }\n\n const attributedTo = object.attributedTo as ActorProperties | undefined;\n let placeholder = 'Reply...';\n if (attributedTo?.preferredUsername && attributedTo?.id) {\n placeholder = `Reply to ${getUsername(attributedTo)}...`;\n }\n\n return (\n <>\n <div\n className={`flex w-full cursor-pointer gap-x-3 py-6 ${className || ''}`}\n onClick={() => setShowReplyModal(true)}\n {...props}\n >\n <APAvatar author={user as ActorProperties} />\n <div className='flex w-full items-center'>\n <div className='w-full text-[1.5rem] text-gray-500 transition-colors dark:text-gray-400'>\n {placeholder}\n </div>\n </div>\n </div>\n\n {showReplyModal && (\n <NewNoteModal\n open={showReplyModal}\n replyTo={{\n object: object,\n actor: object.attributedTo as ActorProperties\n }}\n onOpenChange={(open) => {\n setShowReplyModal(open);\n }}\n onReply={() => {\n onReply?.();\n setShowReplyModal(false);\n }}\n onReplyError={() => {\n onReplyError?.();\n }}\n />\n )}\n </>\n );\n};\n\nexport default APReplyBox;\n","import React from 'react';\nimport {LucideIcon} from '@tryghost/shade';\n\ninterface DeletedFeedItemProps {\n last?: boolean;\n}\n\nconst DeletedFeedItem: React.FC<DeletedFeedItemProps> = ({last}) => {\n return (\n <div className='relative mt-[-5px] py-5'>\n <div className='flex h-12 grow items-center gap-2 rounded-lg border border-gray-200 p-2 px-[10px] text-gray-600'>\n <LucideIcon.Trash size={18} strokeWidth={1.25} />\n This post has been deleted\n </div>\n {!last && <div className=\"absolute bottom-0 left-[18px] top-[70px] z-0 mb-[-13px] w-[2px] rounded-sm bg-gray-200\"></div>}\n </div>\n );\n};\n\nexport default DeletedFeedItem;\n"],"names":["__iconNode","Trash","createLucideIcon","ShowRepliesButton","count","onClick","variant","preserveScroll","loading","buttonRef","useRef","getButtonText","handleClick","container","scrollTop","jsxs","jsx","Button","e","LoadingIndicator","useReplyChainData","postId","options","includeAncestors","replyChain","isReplyChainLoading","loadMoreChildren","loadMoreChildReplies","hasMoreChildren","hasMoreChildReplies","useReplyChainForUser","threadParents","_b","_a","mapPostToActivity","threadPost","processedReplies","childData","mainReply","chainItems","APReplyBox","object","onReply","onReplyError","className","props","user","useUserDataForUser","showReplyModal","setShowReplyModal","useState","attributedTo","placeholder","getUsername","Fragment","APAvatar","NewNoteModal","open","DeletedFeedItem","last","LucideIcon.Trash"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,5 +1,5 @@
1
- import { ai as ce, ax as Pn, ay as Te, az as et, j as v, aA as Nr, aB as Cn, aC as On, s as Me, b5 as Tn, R as A, ah as Lr, bs as Rn, bt as Un, ag as tr, b as xe, c as rr, bu as Nn, e as Ln, k as nr, B as De, bv as or, b6 as Mn, bw as Ke, bx as Bn, by as Wn, bz as sr, O as Ve, bA as ir, bB as qn, bC as Hn, bD as ar } from "./index--Q6orQkb.mjs";
2
- import { A as Kn } from "./at-sign-Fsk3x72r.mjs";
1
+ import { aj as ce, ay as Pn, az as Te, aA as et, j as v, aB as Nr, aC as Cn, aD as On, s as Me, b6 as Tn, R as A, ai as Lr, bt as Rn, bu as Un, ah as tr, b as xe, c as rr, bv as Nn, e as Ln, k as nr, B as De, bw as or, b7 as Mn, bx as Ke, by as Bn, bz as Wn, bA as sr, O as Ve, bB as ir, bC as qn, bD as Hn, bE as ar } from "./index-DIicyWvr.mjs";
2
+ import { A as Kn } from "./at-sign-l8HMU0fk.mjs";
3
3
  var Jn = Symbol.for("react.lazy"), tt = Pn[" use ".trim().toString()];
4
4
  function Gn(e) {
5
5
  return typeof e == "object" && e !== null && "then" in e;
@@ -3738,4 +3738,4 @@ const Ur = (e) => {
3738
3738
  export {
3739
3739
  Tu as E
3740
3740
  };
3741
- //# sourceMappingURL=edit-profile-CYh00FZ7.mjs.map
3741
+ //# sourceMappingURL=edit-profile-DdCJ6UkE.mjs.map