@tryghost/activitypub 3.0.7 → 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.
- package/dist/activitypub.js +6 -3
- package/dist/{at-sign-DjgaOOtV.mjs → at-sign-l8HMU0fk.mjs} +2 -2
- package/dist/{at-sign-DjgaOOtV.mjs.map → at-sign-l8HMU0fk.mjs.map} +1 -1
- package/dist/{avatar-flipboard-8NioODS5.mjs → avatar-flipboard-D12yCmyH.mjs} +2 -2
- package/dist/{avatar-flipboard-8NioODS5.mjs.map → avatar-flipboard-D12yCmyH.mjs.map} +1 -1
- package/dist/{bluesky-sharing-B4oF-0BN.mjs → bluesky-sharing-D65sfQFX.mjs} +4 -4
- package/dist/{bluesky-sharing-B4oF-0BN.mjs.map → bluesky-sharing-D65sfQFX.mjs.map} +1 -1
- package/dist/{copy-BxgO1lWX.mjs → copy-DCHXVz-9.mjs} +2 -2
- package/dist/{copy-BxgO1lWX.mjs.map → copy-DCHXVz-9.mjs.map} +1 -1
- package/dist/{deleted-feed-item-Ct4Zc7u3.mjs → deleted-feed-item-BkXeOOSC.mjs} +4 -4
- package/dist/{deleted-feed-item-Ct4Zc7u3.mjs.map → deleted-feed-item-BkXeOOSC.mjs.map} +1 -1
- package/dist/{edit-profile-DVsYbpNY.mjs → edit-profile-DdCJ6UkE.mjs} +1211 -1121
- package/dist/edit-profile-DdCJ6UkE.mjs.map +1 -0
- package/dist/{feed-D0aeoOOJ.mjs → feed-D4gYSgoO.mjs} +4 -4
- package/dist/{feed-D0aeoOOJ.mjs.map → feed-D4gYSgoO.mjs.map} +1 -1
- package/dist/{hash-B-J30lCU.mjs → hash-D_Ql6FHR.mjs} +2 -2
- package/dist/{hash-B-J30lCU.mjs.map → hash-D_Ql6FHR.mjs.map} +1 -1
- package/dist/{inbox-BrLsHadF.mjs → inbox-BIeU-G-G.mjs} +2 -2
- package/dist/{inbox-BrLsHadF.mjs.map → inbox-BIeU-G-G.mjs.map} +1 -1
- package/dist/{index-BMm_mIRT.mjs → index-BlNT1f8K.mjs} +38 -38
- package/dist/index-BlNT1f8K.mjs.map +1 -0
- package/dist/{index-BftxScf5.mjs → index-BurflorF.mjs} +463 -372
- package/dist/index-BurflorF.mjs.map +1 -0
- package/dist/{index-WlK4xdmR.mjs → index-BvOcRwis.mjs} +2 -2
- package/dist/{index-WlK4xdmR.mjs.map → index-BvOcRwis.mjs.map} +1 -1
- package/dist/{index-DL7eG3Ac.mjs → index-CPG1Xmp8.mjs} +16 -16
- package/dist/{index-DL7eG3Ac.mjs.map → index-CPG1Xmp8.mjs.map} +1 -1
- package/dist/{index-_vEj3NfZ.mjs → index-DIicyWvr.mjs} +9988 -9978
- package/dist/index-DIicyWvr.mjs.map +1 -0
- package/dist/{index-BdcW7GlH.mjs → index-DK0316YP.mjs} +35 -35
- package/dist/{index-BdcW7GlH.mjs.map → index-DK0316YP.mjs.map} +1 -1
- package/dist/{index-DnpX9U7J.mjs → index-DiYjJ67s.mjs} +121 -121
- package/dist/index-DiYjJ67s.mjs.map +1 -0
- package/dist/{index-DyFr7l3O.mjs → index-l72TqahD.mjs} +2450 -2838
- package/dist/index-l72TqahD.mjs.map +1 -0
- package/dist/{moderation-KWQp9gQj.mjs → moderation-B0rtiaEH.mjs} +3 -3
- package/dist/{moderation-KWQp9gQj.mjs.map → moderation-B0rtiaEH.mjs.map} +1 -1
- package/dist/{note-CfQDRkeT.mjs → note-DjaU27En.mjs} +4 -4
- package/dist/{note-CfQDRkeT.mjs.map → note-DjaU27En.mjs.map} +1 -1
- package/dist/{reply-BrWarBVQ.mjs → reply-4cqNFwLY.mjs} +2 -2
- package/dist/{reply-BrWarBVQ.mjs.map → reply-4cqNFwLY.mjs.map} +1 -1
- package/dist/separator-Dgj8LPTF.mjs +116 -0
- package/dist/separator-Dgj8LPTF.mjs.map +1 -0
- package/dist/{settings-CCnMmVaW.mjs → settings-qNWc2HyW.mjs} +3 -3
- package/dist/{settings-CCnMmVaW.mjs.map → settings-qNWc2HyW.mjs.map} +1 -1
- package/dist/{step-1-HGv6537o.mjs → step-1-CuRWXSkm.mjs} +12 -12
- package/dist/{step-1-HGv6537o.mjs.map → step-1-CuRWXSkm.mjs.map} +1 -1
- package/dist/{step-2-hqeY_dIc.mjs → step-2-BsxjLzY8.mjs} +7 -7
- package/dist/{step-2-hqeY_dIc.mjs.map → step-2-BsxjLzY8.mjs.map} +1 -1
- package/dist/{step-3-8yg4QPpr.mjs → step-3-NBvYqr7R.mjs} +7 -7
- package/dist/{step-3-8yg4QPpr.mjs.map → step-3-NBvYqr7R.mjs.map} +1 -1
- package/dist/{tabs-BZytpdZ9.mjs → tabs-ROut24vi.mjs} +35 -35
- package/dist/{tabs-BZytpdZ9.mjs.map → tabs-ROut24vi.mjs.map} +1 -1
- package/dist/{topic-filter-1kNAxvyr.mjs → topic-filter-YL1wy3Q1.mjs} +2 -2
- package/dist/{topic-filter-1kNAxvyr.mjs.map → topic-filter-YL1wy3Q1.mjs.map} +1 -1
- package/package.json +4 -2
- package/dist/edit-profile-DVsYbpNY.mjs.map +0 -1
- package/dist/index-BMm_mIRT.mjs.map +0 -1
- package/dist/index-BftxScf5.mjs.map +0 -1
- package/dist/index-DnpX9U7J.mjs.map +0 -1
- package/dist/index-DyFr7l3O.mjs.map +0 -1
- package/dist/index-_vEj3NfZ.mjs.map +0 -1
- package/dist/separator-nDV4oVPB.mjs +0 -39
- package/dist/separator-nDV4oVPB.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-DnpX9U7J.mjs","sources":["../../../node_modules/lucide-react/dist/esm/icons/pencil.js","../../../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.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 [\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.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: \"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, LucideIcon, NoValueLabel, NoValueLabelIcon} from '@tryghost/shade';\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='text-gray-600 break-anywhere'>\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 space-y-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, LucideIcon, NoValueLabel, NoValueLabelIcon, Separator} from '@tryghost/shade';\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'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 space-y-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, LucideIcon, NoValueLabel, NoValueLabelIcon, Separator} from '@tryghost/shade';\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 space-y-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 {\n AlertDialog,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n Button,\n H4,\n LucideIcon\n} from '@tryghost/shade';\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 {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n Button,\n Popover,\n PopoverClose,\n PopoverContent,\n PopoverTrigger,\n buttonVariants\n} from '@tryghost/shade';\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't be able to follow you or interact with your content.</>\n }\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n {dialogType !== 'domain' &&\n <Button className='-ml-3 mr-auto 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';\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, H2, H4, LucideIcon, NoValueLabel, NoValueLabelIcon, Skeleton, Tabs, TabsContent, TabsList, TabsTrigger, TabsTriggerCount, abbreviateNumber} from '@tryghost/shade';\nimport {EmptyViewIcon, EmptyViewIndicator} from '@src/components/global/empty-view-indicator';\nimport {SettingAction} from '@src/views/preferences/components/settings';\nimport {openLinksInNewTab, 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='mt-4 truncate break-anywhere'>{!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 relative text-[1.5rem] break-anywhere [&>p]:mb-3 ${isExpanded ? 'max-h-none pb-7' : 'max-h-[160px] overflow-hidden'} relative`}>\n {!isLoadingAccount ?\n <div dangerouslySetInnerHTML={{__html: 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: 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'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","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]}
|