@tryghost/activitypub 3.1.13 → 3.1.16

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 (59) hide show
  1. package/dist/activitypub.js +1 -1
  2. package/dist/{at-sign-WxdwrLgJ.mjs → at-sign-DbvyEqya.mjs} +2 -2
  3. package/dist/{at-sign-WxdwrLgJ.mjs.map → at-sign-DbvyEqya.mjs.map} +1 -1
  4. package/dist/{avatar-flipboard-DSiWdH0F.mjs → avatar-flipboard-DlA8At88.mjs} +2 -2
  5. package/dist/{avatar-flipboard-DSiWdH0F.mjs.map → avatar-flipboard-DlA8At88.mjs.map} +1 -1
  6. package/dist/{bluesky-sharing-B86jF6P2.mjs → bluesky-sharing-DJF8L8YX.mjs} +4 -4
  7. package/dist/{bluesky-sharing-B86jF6P2.mjs.map → bluesky-sharing-DJF8L8YX.mjs.map} +1 -1
  8. package/dist/{copy-Dv_Mr41S.mjs → copy-o8CPkfOy.mjs} +2 -2
  9. package/dist/{copy-Dv_Mr41S.mjs.map → copy-o8CPkfOy.mjs.map} +1 -1
  10. package/dist/{deleted-feed-item-DwgIr7vo.mjs → deleted-feed-item-D7Lh01A1.mjs} +2 -2
  11. package/dist/{deleted-feed-item-DwgIr7vo.mjs.map → deleted-feed-item-D7Lh01A1.mjs.map} +1 -1
  12. package/dist/{edit-profile-BJDgAblO.mjs → edit-profile-CNx9VFB0.mjs} +343 -342
  13. package/dist/edit-profile-CNx9VFB0.mjs.map +1 -0
  14. package/dist/{feed-Dg6CeeCP.mjs → feed-DUj6zuQG.mjs} +4 -4
  15. package/dist/{feed-Dg6CeeCP.mjs.map → feed-DUj6zuQG.mjs.map} +1 -1
  16. package/dist/{hash-CSsTpjMi.mjs → hash-Ua2cMVZZ.mjs} +2 -2
  17. package/dist/{hash-CSsTpjMi.mjs.map → hash-Ua2cMVZZ.mjs.map} +1 -1
  18. package/dist/{inbox-DexTffBg.mjs → inbox-CHTBd4v6.mjs} +2 -2
  19. package/dist/{inbox-DexTffBg.mjs.map → inbox-CHTBd4v6.mjs.map} +1 -1
  20. package/dist/{index-Vj6Uo60G.mjs → index-0JIzksX8.mjs} +7 -7
  21. package/dist/{index-Vj6Uo60G.mjs.map → index-0JIzksX8.mjs.map} +1 -1
  22. package/dist/{index-DHVdVxus.mjs → index-BUxTXK58.mjs} +10456 -9240
  23. package/dist/index-BUxTXK58.mjs.map +1 -0
  24. package/dist/{index-BCgaO9tm.mjs → index-BaP7ZzBh.mjs} +2 -2
  25. package/dist/{index-BCgaO9tm.mjs.map → index-BaP7ZzBh.mjs.map} +1 -1
  26. package/dist/{index-DunzATiq.mjs → index-Bdx2FYYX.mjs} +2 -2
  27. package/dist/{index-DunzATiq.mjs.map → index-Bdx2FYYX.mjs.map} +1 -1
  28. package/dist/{index-Kd9Hi0Fn.mjs → index-CbeWHLjc.mjs} +6 -6
  29. package/dist/{index-Kd9Hi0Fn.mjs.map → index-CbeWHLjc.mjs.map} +1 -1
  30. package/dist/{index-C5SK4d-U.mjs → index-DSYK4l2Z.mjs} +41 -41
  31. package/dist/index-DSYK4l2Z.mjs.map +1 -0
  32. package/dist/{index-D0zVs-Le.mjs → index-Dvy73QpT.mjs} +3 -3
  33. package/dist/{index-D0zVs-Le.mjs.map → index-Dvy73QpT.mjs.map} +1 -1
  34. package/dist/{index-BgIuNjJ4.mjs → index-pDs048xI.mjs} +4 -4
  35. package/dist/{index-BgIuNjJ4.mjs.map → index-pDs048xI.mjs.map} +1 -1
  36. package/dist/{moderation-DltWXOVa.mjs → moderation-BX6PetXQ.mjs} +3 -3
  37. package/dist/{moderation-DltWXOVa.mjs.map → moderation-BX6PetXQ.mjs.map} +1 -1
  38. package/dist/{note-m0fl222x.mjs → note-DWKmf61a.mjs} +4 -4
  39. package/dist/{note-m0fl222x.mjs.map → note-DWKmf61a.mjs.map} +1 -1
  40. package/dist/{reply-BwjYYb5Y.mjs → reply-D3ggZn8x.mjs} +2 -2
  41. package/dist/{reply-BwjYYb5Y.mjs.map → reply-D3ggZn8x.mjs.map} +1 -1
  42. package/dist/{separator-CdEv3ahM.mjs → separator-BvykMnKw.mjs} +2 -2
  43. package/dist/{separator-CdEv3ahM.mjs.map → separator-BvykMnKw.mjs.map} +1 -1
  44. package/dist/{settings-BdWI832x.mjs → settings-DC22q-Jw.mjs} +3 -3
  45. package/dist/{settings-BdWI832x.mjs.map → settings-DC22q-Jw.mjs.map} +1 -1
  46. package/dist/{step-1-xd_G9AFI.mjs → step-1-SDEAyCzr.mjs} +3 -3
  47. package/dist/{step-1-xd_G9AFI.mjs.map → step-1-SDEAyCzr.mjs.map} +1 -1
  48. package/dist/{step-2-C-T0bLP6.mjs → step-2-Cr20T_8Z.mjs} +5 -5
  49. package/dist/{step-2-C-T0bLP6.mjs.map → step-2-Cr20T_8Z.mjs.map} +1 -1
  50. package/dist/{step-3-Cxv0ahQZ.mjs → step-3-BBI6k4Pz.mjs} +7 -7
  51. package/dist/{step-3-Cxv0ahQZ.mjs.map → step-3-BBI6k4Pz.mjs.map} +1 -1
  52. package/dist/{tabs-BDqPEpa2.mjs → tabs-Cd5f1n42.mjs} +155 -168
  53. package/dist/{tabs-BDqPEpa2.mjs.map → tabs-Cd5f1n42.mjs.map} +1 -1
  54. package/dist/{topic-filter-C1NL6HYi.mjs → topic-filter-CXslsKa8.mjs} +2 -2
  55. package/dist/{topic-filter-C1NL6HYi.mjs.map → topic-filter-CXslsKa8.mjs.map} +1 -1
  56. package/package.json +2 -4
  57. package/dist/edit-profile-BJDgAblO.mjs.map +0 -1
  58. package/dist/index-C5SK4d-U.mjs.map +0 -1
  59. package/dist/index-DHVdVxus.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"note-m0fl222x.mjs","sources":["../src/views/feed/note.tsx"],"sourcesContent":["import APAvatar from '@src/components/global/ap-avatar';\nimport APReplyBox from '@src/components/global/ap-reply-box';\nimport DeletedFeedItem from '@src/components/feed/deleted-feed-item';\nimport FeedItem from '@components/feed/feed-item';\nimport Layout from '@src/components/layout/layout';\nimport ProfilePreviewHoverCard from '@components/global/profile-preview-hover-card';\nimport React, {useEffect, useRef, useState} from 'react';\nimport ShowRepliesButton from '@src/components/global/show-replies-button';\nimport getUsername from '@src/utils/get-username';\nimport {Activity} from '@tryghost/admin-x-framework/api/activitypub';\nimport {EmptyViewIcon, EmptyViewIndicator} from '@src/components/global/empty-view-indicator';\nimport {LoadingIndicator, Skeleton} from '@tryghost/shade/components';\nimport {LucideIcon} from '@tryghost/shade/utils';\nimport {handleProfileClick} from '@src/utils/handle-profile-click';\nimport {isPendingActivity} from '@src/utils/pending-activity';\nimport {renderTimestamp} from '@src/utils/render-timestamp';\nimport {useNavigateWithBasePath} from '@src/hooks/use-navigate-with-base-path';\nimport {useNavigationStack, useParams} from '@tryghost/admin-x-framework';\nimport {useReplyChainData} from '@hooks/use-reply-chain-data';\n\nconst FeedItemDivider: React.FC = () => (\n <div className=\"h-px w-full bg-gray-200 dark:bg-gray-950\"></div>\n);\n\nconst Note = () => {\n const {postId} = useParams();\n const {canGoBack} = useNavigationStack();\n\n const [expandedChains, setExpandedChains] = useState<Set<string>>(new Set());\n const [fullyExpandedChains, setFullyExpandedChains] = useState<Set<string>>(new Set());\n const [loadingChains, setLoadingChains] = useState<Set<string>>(new Set());\n const [isLoadingMoreTopLevelReplies, setIsLoadingMoreTopLevelReplies] = useState(false);\n const repliesRef = useRef<HTMLDivElement>(null);\n const postRef = useRef<HTMLDivElement>(null);\n const observerRef = useRef<IntersectionObserver | null>(null);\n const loadMoreRef = useRef<HTMLDivElement | null>(null);\n const navigate = useNavigateWithBasePath();\n\n const {\n threadParents,\n post: currentPost,\n processedReplies,\n isLoading,\n loadMoreChildren,\n loadMoreChildReplies,\n hasMoreChildren,\n hasMoreChildReplies\n } = useReplyChainData(decodeURIComponent(postId ?? ''), {includeAncestors: true});\n\n const object = currentPost?.object;\n\n const replyCount = object?.replyCount ?? 0;\n const [hasScrolledToPost, setHasScrolledToPost] = useState(false);\n\n useEffect(() => {\n if (postRef.current && threadParents.length > 0 && !hasScrolledToPost) {\n postRef.current.scrollIntoView({\n behavior: 'instant',\n block: 'start'\n });\n setHasScrolledToPost(true);\n }\n }, [threadParents, hasScrolledToPost]);\n\n useEffect(() => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n\n const container = document.querySelector('[data-scrollable-container]') as HTMLElement;\n if (!container) {\n return;\n }\n\n observerRef.current = new IntersectionObserver(async (entries) => {\n if (entries[0].isIntersecting && hasMoreChildren && !isLoadingMoreTopLevelReplies) {\n setIsLoadingMoreTopLevelReplies(true);\n try {\n await loadMoreChildren();\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Failed to load more top-level replies:', error);\n } finally {\n setIsLoadingMoreTopLevelReplies(false);\n }\n }\n }, {\n root: container,\n rootMargin: '200px'\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 }, [hasMoreChildren, isLoadingMoreTopLevelReplies, loadMoreChildren]);\n\n if (isLoading) {\n return (\n <Layout>\n <div className='mx-auto flex max-w-[620px] flex-col items-center gap-3 pt-9 lg:px-8'>\n <div className='flex w-full items-center gap-3'>\n <Skeleton className='size-10 rounded-full' />\n <div className='grow pt-1'>\n <Skeleton className='w-24' />\n <Skeleton className='w-3/5' />\n </div>\n </div>\n <div className='mb-7 w-full'>\n <Skeleton />\n <Skeleton className='w-4/5' />\n <Skeleton />\n </div>\n <FeedItemDivider />\n <div className='flex w-full items-center gap-3 py-3'>\n <Skeleton className='block size-full' containerClassName='size-10 rounded-full overflow-hidden' />\n <div>\n <Skeleton className='w-52' />\n <Skeleton className='w-28' />\n </div>\n </div>\n <FeedItemDivider />\n </div>\n </Layout>\n );\n }\n\n if (!currentPost) {\n return (\n <Layout>\n <div className='mx-auto mt-4 flex w-full max-w-[620px] flex-col items-center'>\n <EmptyViewIndicator>\n <EmptyViewIcon><LucideIcon.Hash /></EmptyViewIcon>\n <div>Error loading note.</div>\n </EmptyViewIndicator>\n </div>\n </Layout>\n );\n }\n\n function handleDelete() {\n // Reply count will be updated via cache invalidation\n }\n\n function toggleChain(chainId: string) {\n setExpandedChains((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(chainId)) {\n newSet.delete(chainId);\n } else {\n newSet.add(chainId);\n setFullyExpandedChains((fullyExpanded) => {\n const newFullyExpanded = new Set(fullyExpanded);\n newFullyExpanded.add(chainId);\n return newFullyExpanded;\n });\n }\n return newSet;\n });\n }\n\n async function loadMoreForChain(chainId: string, childIndex: number) {\n if (loadingChains.has(chainId)) {\n return;\n }\n\n setLoadingChains(prev => new Set(prev).add(chainId));\n\n try {\n if (loadMoreChildReplies) {\n await loadMoreChildReplies(childIndex);\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Failed to load more replies for chain:', error);\n } finally {\n setLoadingChains((prev) => {\n const newSet = new Set(prev);\n newSet.delete(chainId);\n return newSet;\n });\n }\n }\n\n return (\n <Layout>\n <div className='mx-auto flex h-full max-w-[620px] flex-col'>\n <div className='relative flex-1'>\n <div className='grow overflow-y-auto'>\n <div className={`mx-auto px-8 pt-5 pb-10 max-lg:px-0`}>\n {!threadParents.length &&\n <ProfilePreviewHoverCard actor={currentPost.actor} isCurrentUser={currentPost.object.authored}>\n <div className={`col-[2/3] mx-auto flex w-full cursor-pointer items-center gap-3 ${canGoBack ? 'pt-10 max-md:pt-5' : 'pt-5'}`}>\n <div className='relative z-10'>\n <APAvatar author={currentPost.actor} showFollowButton={!currentPost.object.authored && !currentPost.actor.followedByMe}/>\n </div>\n <div className='relative z-10 flex w-full min-w-0 cursor-pointer flex-col overflow-visible text-[1.5rem]' onClick={(e) => {\n handleProfileClick(currentPost.actor, navigate, e);\n }}>\n <div className='flex w-full'>\n <span className='min-w-0 truncate font-semibold whitespace-nowrap hover:underline'>{currentPost.actor.name}</span>\n </div>\n <div className='flex w-full'>\n <span className='truncate text-gray-700 after:mx-1 after:font-normal after:text-gray-700 after:content-[\"·\"]'>{getUsername(currentPost.actor)}</span>\n <span className='text-gray-700'>{renderTimestamp(object, !object.authored)}</span>\n </div>\n </div>\n </div>\n </ProfilePreviewHoverCard>\n }\n\n {threadParents.map((item) => {\n return (\n item.object.type === 'Tombstone' ? (\n <DeletedFeedItem last={false} />\n ) : (\n <FeedItem\n actor={item.actor}\n allowDelete={false}\n commentCount={item.object.replyCount ?? 0}\n last={false}\n layout='reply'\n likeCount={item.object.likeCount ?? 0}\n object={item.object}\n repostCount={item.object.repostCount ?? 0}\n type='Note'\n onClick={() => {\n navigate(`/${item.object.type === 'Article' ? 'reader' : 'notes'}/${encodeURIComponent(item.object.id)}`);\n }}\n />\n )\n );\n })}\n <div ref={postRef} className={`${canGoBack ? 'scroll-mt-[12px]' : 'scroll-mt-[124px]'}`}>\n <div className={`${threadParents.length > 0 && 'min-h-[calc(100vh-52px)]'}`}>\n <FeedItem\n actor={currentPost.actor}\n allowDelete={false}\n commentCount={replyCount}\n last={true}\n layout={'modal'}\n likeCount={object.likeCount ?? 0}\n object={object}\n repostCount={object.repostCount}\n showHeader={threadParents.length > 0}\n showStats={true}\n type='Note'\n />\n <APReplyBox\n object={object}\n />\n <FeedItemDivider />\n <div ref={repliesRef}>\n {\n processedReplies.map((replyGroup, groupIndex) => {\n const isLastGroup = groupIndex === processedReplies.length - 1;\n const chainId = replyGroup.mainReply.id;\n const isExpanded = expandedChains.has(chainId);\n const isFullyExpanded = fullyExpandedChains.has(chainId);\n const isChainLoading = loadingChains.has(chainId);\n const hasChain = replyGroup.chain.length > 0;\n\n return (\n <React.Fragment key={replyGroup.mainReply.id}>\n <FeedItem\n actor={replyGroup.mainReply.actor}\n allowDelete={replyGroup.mainReply.object.authored}\n commentCount={replyGroup.mainReply.object.replyCount ?? 0}\n isChainParent={hasChain}\n isPending={isPendingActivity(replyGroup.mainReply.id)}\n last={!hasChain}\n layout='reply'\n likeCount={replyGroup.mainReply.object.likeCount ?? 0}\n object={replyGroup.mainReply.object}\n parentId={object.id}\n repostCount={replyGroup.mainReply.object.repostCount ?? 0}\n type='Note'\n onClick={() => {\n navigate(`/notes/${encodeURIComponent(replyGroup.mainReply.id)}`);\n }}\n onDelete={handleDelete}\n />\n\n {hasChain && replyGroup.chain[0] && (\n <FeedItem\n key={replyGroup.chain[0].id}\n actor={replyGroup.chain[0].actor}\n allowDelete={replyGroup.chain[0].object.authored}\n commentCount={replyGroup.chain[0].object.replyCount ?? 0}\n isChainContinuation={true}\n isPending={isPendingActivity(replyGroup.chain[0].id)}\n last={replyGroup.chain.length === 1}\n layout='reply'\n likeCount={replyGroup.chain[0].object.likeCount ?? 0}\n object={replyGroup.chain[0].object}\n parentId={object.id}\n repostCount={replyGroup.chain[0].object.repostCount ?? 0}\n type='Note'\n onClick={() => {\n navigate(`/notes/${encodeURIComponent(replyGroup.chain[0].id)}`);\n }}\n onDelete={handleDelete}\n />\n )}\n\n {hasChain && isExpanded && replyGroup.chain.slice(1).map((chainItem: Activity, chainIndex: number) => {\n const isLastChainItem = chainIndex === replyGroup.chain.slice(1).length - 1;\n const hasMoreReplies = hasMoreChildReplies && hasMoreChildReplies(groupIndex);\n const shouldShowConnector = isLastChainItem && hasMoreReplies;\n\n return (\n <FeedItem\n key={chainItem.id}\n actor={chainItem.actor}\n allowDelete={chainItem.object.authored}\n commentCount={chainItem.object.replyCount ?? 0}\n isChainContinuation={true}\n isPending={isPendingActivity(chainItem.id)}\n last={isLastChainItem && !shouldShowConnector}\n layout='reply'\n likeCount={chainItem.object.likeCount ?? 0}\n object={chainItem.object}\n parentId={object.id}\n repostCount={chainItem.object.repostCount ?? 0}\n type='Note'\n onClick={() => {\n navigate(`/notes/${encodeURIComponent(chainItem.id)}`);\n }}\n onDelete={handleDelete}\n />\n );\n })}\n\n {hasChain && replyGroup.chain.length > 1 && !isExpanded && (\n <ShowRepliesButton\n variant='expand'\n onClick={() => toggleChain(chainId)}\n />\n )}\n\n {hasChain && isExpanded && isFullyExpanded && hasMoreChildReplies && hasMoreChildReplies(groupIndex) && (\n <ShowRepliesButton\n loading={isChainLoading}\n variant='loadMore'\n onClick={() => loadMoreForChain(chainId, groupIndex)}\n />\n )}\n\n {!isLastGroup && <FeedItemDivider />}\n </React.Fragment>\n );\n })\n }\n\n {isLoadingMoreTopLevelReplies && (\n <div className='flex flex-col items-center justify-center text-center'>\n <LoadingIndicator size='md' />\n </div>\n )}\n </div>\n\n {hasMoreChildren && <div ref={loadMoreRef} className='h-1'></div>}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </Layout>\n );\n};\n\nexport default Note;\n"],"names":["FeedItemDivider","jsx","Note","postId","useParams","canGoBack","useNavigationStack","expandedChains","setExpandedChains","useState","fullyExpandedChains","setFullyExpandedChains","loadingChains","setLoadingChains","isLoadingMoreTopLevelReplies","setIsLoadingMoreTopLevelReplies","repliesRef","useRef","postRef","observerRef","loadMoreRef","navigate","useNavigateWithBasePath","threadParents","currentPost","processedReplies","isLoading","loadMoreChildren","loadMoreChildReplies","hasMoreChildren","hasMoreChildReplies","useReplyChainData","object","replyCount","hasScrolledToPost","setHasScrolledToPost","useEffect","container","entries","error","Layout","jsxs","Skeleton","EmptyViewIndicator","EmptyViewIcon","LucideIcon.Hash","handleDelete","toggleChain","chainId","prev","newSet","fullyExpanded","newFullyExpanded","loadMoreForChain","childIndex","ProfilePreviewHoverCard","APAvatar","e","handleProfileClick","getUsername","item","DeletedFeedItem","FeedItem","APReplyBox","replyGroup","groupIndex","isLastGroup","isExpanded","isFullyExpanded","isChainLoading","hasChain","React","isPendingActivity","chainItem","chainIndex","isLastChainItem","hasMoreReplies","shouldShowConnector","ShowRepliesButton","LoadingIndicator"],"mappings":";;;AAoBA,MAAMA,IAA4B,MAC9BC,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,2CAAA,CAA2C,GAGxDC,KAAO,MAAM;AACf,QAAM,EAAC,QAAAC,EAAA,IAAUC,EAAA,GACX,EAAC,WAAAC,EAAA,IAAaC,GAAA,GAEd,CAACC,GAAgBC,CAAiB,IAAIC,EAAsB,oBAAI,KAAK,GACrE,CAACC,GAAqBC,CAAsB,IAAIF,EAAsB,oBAAI,KAAK,GAC/E,CAACG,GAAeC,CAAgB,IAAIJ,EAAsB,oBAAI,KAAK,GACnE,CAACK,GAA8BC,CAA+B,IAAIN,EAAS,EAAK,GAChFO,IAAaC,EAAuB,IAAI,GACxCC,IAAUD,EAAuB,IAAI,GACrCE,IAAcF,EAAoC,IAAI,GACtDG,IAAcH,EAA8B,IAAI,GAChDI,IAAWC,GAAA,GAEX;AAAA,IACF,eAAAC;AAAA,IACA,MAAMC;AAAA,IACN,kBAAAC;AAAA,IACA,WAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,qBAAAC;AAAA,EAAA,IACAC,GAAkB,mBAAmB5B,KAAU,EAAE,GAAG,EAAC,kBAAkB,IAAK,GAE1E6B,IAASR,KAAA,gBAAAA,EAAa,QAEtBS,KAAaD,KAAA,gBAAAA,EAAQ,eAAc,GACnC,CAACE,GAAmBC,CAAoB,IAAI1B,EAAS,EAAK;AAkDhE,MAhDA2B,EAAU,MAAM;AACZ,IAAIlB,EAAQ,WAAWK,EAAc,SAAS,KAAK,CAACW,MAChDhB,EAAQ,QAAQ,eAAe;AAAA,MAC3B,UAAU;AAAA,MACV,OAAO;AAAA,IAAA,CACV,GACDiB,EAAqB,EAAI;AAAA,EAEjC,GAAG,CAACZ,GAAeW,CAAiB,CAAC,GAErCE,EAAU,MAAM;AACZ,IAAIjB,EAAY,WACZA,EAAY,QAAQ,WAAA;AAGxB,UAAMkB,IAAY,SAAS,cAAc,6BAA6B;AACtE,QAAKA;AAIL,aAAAlB,EAAY,UAAU,IAAI,qBAAqB,OAAOmB,MAAY;AAC9D,YAAIA,EAAQ,CAAC,EAAE,kBAAkBT,KAAmB,CAACf,GAA8B;AAC/E,UAAAC,EAAgC,EAAI;AACpC,cAAI;AACA,kBAAMY,EAAA;AAAA,UACV,SAASY,GAAO;AAEZ,oBAAQ,MAAM,0CAA0CA,CAAK;AAAA,UACjE,UAAA;AACI,YAAAxB,EAAgC,EAAK;AAAA,UACzC;AAAA,QACJ;AAAA,MACJ,GAAG;AAAA,QACC,MAAMsB;AAAA,QACN,YAAY;AAAA,MAAA,CACf,GAEGjB,EAAY,WACZD,EAAY,QAAQ,QAAQC,EAAY,OAAO,GAG5C,MAAM;AACT,QAAID,EAAY,WACZA,EAAY,QAAQ,WAAA;AAAA,MAE5B;AAAA,EACJ,GAAG,CAACU,GAAiBf,GAA8Ba,CAAgB,CAAC,GAEhED;AACA,WACIzB,gBAAAA,EAAAA,IAACuC,GAAA,EACG,UAAAC,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,uEACX,UAAA;AAAA,MAAAA,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,kCACX,UAAA;AAAA,QAAAxC,gBAAAA,EAAAA,IAACyC,GAAA,EAAS,WAAU,uBAAA,CAAuB;AAAA,QAC3CD,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,aACX,UAAA;AAAA,UAAAxC,gBAAAA,EAAAA,IAACyC,GAAA,EAAS,WAAU,OAAA,CAAO;AAAA,UAC3BzC,gBAAAA,EAAAA,IAACyC,GAAA,EAAS,WAAU,QAAA,CAAQ;AAAA,QAAA,EAAA,CAChC;AAAA,MAAA,GACJ;AAAA,MACAD,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,eACX,UAAA;AAAA,QAAAxC,gBAAAA,EAAAA,IAACyC,GAAA,EAAS;AAAA,QACVzC,gBAAAA,EAAAA,IAACyC,GAAA,EAAS,WAAU,QAAA,CAAQ;AAAA,8BAC3BA,GAAA,CAAA,CAAS;AAAA,MAAA,GACd;AAAA,4BACC1C,GAAA,EAAgB;AAAA,MACjByC,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,uCACX,UAAA;AAAA,QAAAxC,gBAAAA,EAAAA,IAACyC,GAAA,EAAS,WAAU,mBAAkB,oBAAmB,wCAAuC;AAAA,+BAC/F,OAAA,EACG,UAAA;AAAA,UAAAzC,gBAAAA,EAAAA,IAACyC,GAAA,EAAS,WAAU,OAAA,CAAO;AAAA,UAC3BzC,gBAAAA,EAAAA,IAACyC,GAAA,EAAS,WAAU,OAAA,CAAO;AAAA,QAAA,EAAA,CAC/B;AAAA,MAAA,GACJ;AAAA,4BACC1C,GAAA,CAAA,CAAgB;AAAA,IAAA,EAAA,CACrB,EAAA,CACJ;AAIR,MAAI,CAACwB;AACD,iCACKgB,GAAA,EACG,UAAAvC,gBAAAA,EAAAA,IAAC,SAAI,WAAU,gEACX,iCAAC0C,IAAA,EACG,UAAA;AAAA,MAAA1C,gBAAAA,EAAAA,IAAC2C,IAAA,EAAc,UAAA3C,gBAAAA,EAAAA,IAAC4C,IAAA,CAAA,CAAgB,GAAE;AAAA,MAClC5C,gBAAAA,EAAAA,IAAC,SAAI,UAAA,sBAAA,CAAmB;AAAA,IAAA,EAAA,CAC5B,GACJ,GACJ;AAIR,WAAS6C,IAAe;AAAA,EAExB;AAEA,WAASC,EAAYC,GAAiB;AAClC,IAAAxC,EAAkB,CAACyC,MAAS;AACxB,YAAMC,IAAS,IAAI,IAAID,CAAI;AAC3B,aAAIC,EAAO,IAAIF,CAAO,IAClBE,EAAO,OAAOF,CAAO,KAErBE,EAAO,IAAIF,CAAO,GAClBrC,EAAuB,CAACwC,MAAkB;AACtC,cAAMC,IAAmB,IAAI,IAAID,CAAa;AAC9C,eAAAC,EAAiB,IAAIJ,CAAO,GACrBI;AAAA,MACX,CAAC,IAEEF;AAAA,IACX,CAAC;AAAA,EACL;AAEA,iBAAeG,EAAiBL,GAAiBM,GAAoB;AACjE,QAAI,CAAA1C,EAAc,IAAIoC,CAAO,GAI7B;AAAA,MAAAnC,EAAiB,OAAQ,IAAI,IAAIoC,CAAI,EAAE,IAAID,CAAO,CAAC;AAEnD,UAAI;AACA,QAAIpB,KACA,MAAMA,EAAqB0B,CAAU;AAAA,MAE7C,SAASf,GAAO;AAEZ,gBAAQ,MAAM,0CAA0CA,CAAK;AAAA,MACjE,UAAA;AACI,QAAA1B,EAAiB,CAACoC,MAAS;AACvB,gBAAMC,IAAS,IAAI,IAAID,CAAI;AAC3B,iBAAAC,EAAO,OAAOF,CAAO,GACdE;AAAA,QACX,CAAC;AAAA,MACL;AAAA;AAAA,EACJ;AAEA,+BACKV,GAAA,EACG,UAAAvC,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,8CACX,UAAAA,gBAAAA,MAAC,OAAA,EAAI,WAAU,mBACX,gCAAC,OAAA,EAAI,WAAU,wBACX,UAAAwC,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAW,uCACX,UAAA;AAAA,IAAA,CAAClB,EAAc,UAChBtB,gBAAAA,EAAAA,IAACsD,MAAwB,OAAO/B,EAAY,OAAO,eAAeA,EAAY,OAAO,UACjF,iCAAC,OAAA,EAAI,WAAW,mEAAmEnB,IAAY,sBAAsB,MAAM,IACvH,UAAA;AAAA,MAAAJ,gBAAAA,MAAC,SAAI,WAAU,iBACX,UAAAA,gBAAAA,MAACuD,IAAA,EAAS,QAAQhC,EAAY,OAAO,kBAAkB,CAACA,EAAY,OAAO,YAAY,CAACA,EAAY,MAAM,cAAa,GAC3H;AAAA,6BACC,OAAA,EAAI,WAAU,4FAA2F,SAAS,CAACiC,MAAM;AACtH,QAAAC,GAAmBlC,EAAY,OAAOH,GAAUoC,CAAC;AAAA,MACrD,GACI,UAAA;AAAA,QAAAxD,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,eACX,UAAAA,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,oEAAoE,UAAAuB,EAAY,MAAM,KAAA,CAAK,GAC/G;AAAA,QACAiB,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,eACX,UAAA;AAAA,UAAAxC,gBAAAA,MAAC,UAAK,WAAU,+FAA+F,UAAA0D,GAAYnC,EAAY,KAAK,GAAE;AAAA,UAC9IvB,gBAAAA,EAAAA,IAAC,UAAK,WAAU,iBAAiB,aAAgB+B,GAAQ,CAACA,EAAO,QAAQ,EAAA,CAAE;AAAA,QAAA,EAAA,CAC/E;AAAA,MAAA,EAAA,CACJ;AAAA,IAAA,EAAA,CACJ,EAAA,CACJ;AAAA,IAGCT,EAAc,IAAI,CAACqC,MAEZA,EAAK,OAAO,SAAS,oCAChBC,IAAA,EAAgB,MAAM,IAAO,IAE9B5D,gBAAAA,EAAAA;AAAAA,MAAC6D;AAAA,MAAA;AAAA,QACG,OAAOF,EAAK;AAAA,QACZ,aAAa;AAAA,QACb,cAAcA,EAAK,OAAO,cAAc;AAAA,QACxC,MAAM;AAAA,QACN,QAAO;AAAA,QACP,WAAWA,EAAK,OAAO,aAAa;AAAA,QACpC,QAAQA,EAAK;AAAA,QACb,aAAaA,EAAK,OAAO,eAAe;AAAA,QACxC,MAAK;AAAA,QACL,SAAS,MAAM;AACX,UAAAvC,EAAS,IAAIuC,EAAK,OAAO,SAAS,YAAY,WAAW,OAAO,IAAI,mBAAmBA,EAAK,OAAO,EAAE,CAAC,EAAE;AAAA,QAC5G;AAAA,MAAA;AAAA,IAAA,CAIf;AAAA,0BACA,OAAA,EAAI,KAAK1C,GAAS,WAAW,GAAGb,IAAY,qBAAqB,mBAAmB,IACjF,UAAAoC,gBAAAA,EAAAA,KAAC,SAAI,WAAW,GAAGlB,EAAc,SAAS,KAAK,0BAA0B,IACrE,UAAA;AAAA,MAAAtB,gBAAAA,EAAAA;AAAAA,QAAC6D;AAAA,QAAA;AAAA,UACG,OAAOtC,EAAY;AAAA,UACnB,aAAa;AAAA,UACb,cAAcS;AAAA,UACd,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,WAAWD,EAAO,aAAa;AAAA,UAC/B,QAAAA;AAAA,UACA,aAAaA,EAAO;AAAA,UACpB,YAAYT,EAAc,SAAS;AAAA,UACnC,WAAW;AAAA,UACX,MAAK;AAAA,QAAA;AAAA,MAAA;AAAA,MAETtB,gBAAAA,EAAAA;AAAAA,QAAC8D;AAAA,QAAA;AAAA,UACG,QAAA/B;AAAA,QAAA;AAAA,MAAA;AAAA,4BAEHhC,GAAA,EAAgB;AAAA,MACjByC,gBAAAA,EAAAA,KAAC,OAAA,EAAI,KAAKzB,GAEF,UAAA;AAAA,QAAAS,EAAiB,IAAI,CAACuC,GAAYC,MAAe;AAC7C,gBAAMC,IAAcD,MAAexC,EAAiB,SAAS,GACvDuB,IAAUgB,EAAW,UAAU,IAC/BG,IAAa5D,EAAe,IAAIyC,CAAO,GACvCoB,IAAkB1D,EAAoB,IAAIsC,CAAO,GACjDqB,IAAiBzD,EAAc,IAAIoC,CAAO,GAC1CsB,IAAWN,EAAW,MAAM,SAAS;AAE3C,iBACIvB,gBAAAA,OAAC8B,GAAM,UAAN,EACG,UAAA;AAAA,YAAAtE,gBAAAA,EAAAA;AAAAA,cAAC6D;AAAA,cAAA;AAAA,gBACG,OAAOE,EAAW,UAAU;AAAA,gBAC5B,aAAaA,EAAW,UAAU,OAAO;AAAA,gBACzC,cAAcA,EAAW,UAAU,OAAO,cAAc;AAAA,gBACxD,eAAeM;AAAA,gBACf,WAAWE,EAAkBR,EAAW,UAAU,EAAE;AAAA,gBACpD,MAAM,CAACM;AAAA,gBACP,QAAO;AAAA,gBACP,WAAWN,EAAW,UAAU,OAAO,aAAa;AAAA,gBACpD,QAAQA,EAAW,UAAU;AAAA,gBAC7B,UAAUhC,EAAO;AAAA,gBACjB,aAAagC,EAAW,UAAU,OAAO,eAAe;AAAA,gBACxD,MAAK;AAAA,gBACL,SAAS,MAAM;AACX,kBAAA3C,EAAS,UAAU,mBAAmB2C,EAAW,UAAU,EAAE,CAAC,EAAE;AAAA,gBACpE;AAAA,gBACA,UAAUlB;AAAA,cAAA;AAAA,YAAA;AAAA,YAGbwB,KAAYN,EAAW,MAAM,CAAC,KAC3B/D,gBAAAA,EAAAA;AAAAA,cAAC6D;AAAA,cAAA;AAAA,gBAEG,OAAOE,EAAW,MAAM,CAAC,EAAE;AAAA,gBAC3B,aAAaA,EAAW,MAAM,CAAC,EAAE,OAAO;AAAA,gBACxC,cAAcA,EAAW,MAAM,CAAC,EAAE,OAAO,cAAc;AAAA,gBACvD,qBAAqB;AAAA,gBACrB,WAAWQ,EAAkBR,EAAW,MAAM,CAAC,EAAE,EAAE;AAAA,gBACnD,MAAMA,EAAW,MAAM,WAAW;AAAA,gBAClC,QAAO;AAAA,gBACP,WAAWA,EAAW,MAAM,CAAC,EAAE,OAAO,aAAa;AAAA,gBACnD,QAAQA,EAAW,MAAM,CAAC,EAAE;AAAA,gBAC5B,UAAUhC,EAAO;AAAA,gBACjB,aAAagC,EAAW,MAAM,CAAC,EAAE,OAAO,eAAe;AAAA,gBACvD,MAAK;AAAA,gBACL,SAAS,MAAM;AACX,kBAAA3C,EAAS,UAAU,mBAAmB2C,EAAW,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE;AAAA,gBACnE;AAAA,gBACA,UAAUlB;AAAA,cAAA;AAAA,cAhBLkB,EAAW,MAAM,CAAC,EAAE;AAAA,YAAA;AAAA,YAoBhCM,KAAYH,KAAcH,EAAW,MAAM,MAAM,CAAC,EAAE,IAAI,CAACS,GAAqBC,MAAuB;AAClG,oBAAMC,IAAkBD,MAAeV,EAAW,MAAM,MAAM,CAAC,EAAE,SAAS,GACpEY,IAAiB9C,KAAuBA,EAAoBmC,CAAU,GACtEY,IAAsBF,KAAmBC;AAE/C,qBACI3E,gBAAAA,EAAAA;AAAAA,gBAAC6D;AAAA,gBAAA;AAAA,kBAEG,OAAOW,EAAU;AAAA,kBACjB,aAAaA,EAAU,OAAO;AAAA,kBAC9B,cAAcA,EAAU,OAAO,cAAc;AAAA,kBAC7C,qBAAqB;AAAA,kBACrB,WAAWD,EAAkBC,EAAU,EAAE;AAAA,kBACzC,MAAME,KAAmB,CAACE;AAAA,kBAC1B,QAAO;AAAA,kBACP,WAAWJ,EAAU,OAAO,aAAa;AAAA,kBACzC,QAAQA,EAAU;AAAA,kBAClB,UAAUzC,EAAO;AAAA,kBACjB,aAAayC,EAAU,OAAO,eAAe;AAAA,kBAC7C,MAAK;AAAA,kBACL,SAAS,MAAM;AACX,oBAAApD,EAAS,UAAU,mBAAmBoD,EAAU,EAAE,CAAC,EAAE;AAAA,kBACzD;AAAA,kBACA,UAAU3B;AAAA,gBAAA;AAAA,gBAhBL2B,EAAU;AAAA,cAAA;AAAA,YAmB3B,CAAC;AAAA,YAEAH,KAAYN,EAAW,MAAM,SAAS,KAAK,CAACG,KACzClE,gBAAAA,EAAAA;AAAAA,cAAC6E;AAAA,cAAA;AAAA,gBACG,SAAQ;AAAA,gBACR,SAAS,MAAM/B,EAAYC,CAAO;AAAA,cAAA;AAAA,YAAA;AAAA,YAIzCsB,KAAYH,KAAcC,KAAmBtC,KAAuBA,EAAoBmC,CAAU,KAC/FhE,gBAAAA,EAAAA;AAAAA,cAAC6E;AAAA,cAAA;AAAA,gBACG,SAAST;AAAA,gBACT,SAAQ;AAAA,gBACR,SAAS,MAAMhB,EAAiBL,GAASiB,CAAU;AAAA,cAAA;AAAA,YAAA;AAAA,YAI1D,CAACC,KAAejE,gBAAAA,MAACD,GAAA,CAAA,CAAgB;AAAA,UAAA,KArFjBgE,EAAW,UAAU,EAsF1C;AAAA,QAER,CAAC;AAAA,QAGJlD,2BACI,OAAA,EAAI,WAAU,yDACX,UAAAb,gBAAAA,EAAAA,IAAC8E,IAAA,EAAiB,MAAK,KAAA,CAAK,EAAA,CAChC;AAAA,MAAA,GAER;AAAA,MAEClD,KAAmB5B,gBAAAA,EAAAA,IAAC,OAAA,EAAI,KAAKmB,GAAa,WAAU,MAAA,CAAM;AAAA,IAAA,EAAA,CAC/D,EAAA,CACJ;AAAA,EAAA,EAAA,CACJ,EAAA,CACJ,GACJ,EAAA,CACJ,EAAA,CACJ;AAER;"}
1
+ {"version":3,"file":"note-DWKmf61a.mjs","sources":["../src/views/feed/note.tsx"],"sourcesContent":["import APAvatar from '@src/components/global/ap-avatar';\nimport APReplyBox from '@src/components/global/ap-reply-box';\nimport DeletedFeedItem from '@src/components/feed/deleted-feed-item';\nimport FeedItem from '@components/feed/feed-item';\nimport Layout from '@src/components/layout/layout';\nimport ProfilePreviewHoverCard from '@components/global/profile-preview-hover-card';\nimport React, {useEffect, useRef, useState} from 'react';\nimport ShowRepliesButton from '@src/components/global/show-replies-button';\nimport getUsername from '@src/utils/get-username';\nimport {Activity} from '@tryghost/admin-x-framework/api/activitypub';\nimport {EmptyViewIcon, EmptyViewIndicator} from '@src/components/global/empty-view-indicator';\nimport {LoadingIndicator, Skeleton} from '@tryghost/shade/components';\nimport {LucideIcon} from '@tryghost/shade/utils';\nimport {handleProfileClick} from '@src/utils/handle-profile-click';\nimport {isPendingActivity} from '@src/utils/pending-activity';\nimport {renderTimestamp} from '@src/utils/render-timestamp';\nimport {useNavigateWithBasePath} from '@src/hooks/use-navigate-with-base-path';\nimport {useNavigationStack, useParams} from '@tryghost/admin-x-framework';\nimport {useReplyChainData} from '@hooks/use-reply-chain-data';\n\nconst FeedItemDivider: React.FC = () => (\n <div className=\"h-px w-full bg-gray-200 dark:bg-gray-950\"></div>\n);\n\nconst Note = () => {\n const {postId} = useParams();\n const {canGoBack} = useNavigationStack();\n\n const [expandedChains, setExpandedChains] = useState<Set<string>>(new Set());\n const [fullyExpandedChains, setFullyExpandedChains] = useState<Set<string>>(new Set());\n const [loadingChains, setLoadingChains] = useState<Set<string>>(new Set());\n const [isLoadingMoreTopLevelReplies, setIsLoadingMoreTopLevelReplies] = useState(false);\n const repliesRef = useRef<HTMLDivElement>(null);\n const postRef = useRef<HTMLDivElement>(null);\n const observerRef = useRef<IntersectionObserver | null>(null);\n const loadMoreRef = useRef<HTMLDivElement | null>(null);\n const navigate = useNavigateWithBasePath();\n\n const {\n threadParents,\n post: currentPost,\n processedReplies,\n isLoading,\n loadMoreChildren,\n loadMoreChildReplies,\n hasMoreChildren,\n hasMoreChildReplies\n } = useReplyChainData(decodeURIComponent(postId ?? ''), {includeAncestors: true});\n\n const object = currentPost?.object;\n\n const replyCount = object?.replyCount ?? 0;\n const [hasScrolledToPost, setHasScrolledToPost] = useState(false);\n\n useEffect(() => {\n if (postRef.current && threadParents.length > 0 && !hasScrolledToPost) {\n postRef.current.scrollIntoView({\n behavior: 'instant',\n block: 'start'\n });\n setHasScrolledToPost(true);\n }\n }, [threadParents, hasScrolledToPost]);\n\n useEffect(() => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n\n const container = document.querySelector('[data-scrollable-container]') as HTMLElement;\n if (!container) {\n return;\n }\n\n observerRef.current = new IntersectionObserver(async (entries) => {\n if (entries[0].isIntersecting && hasMoreChildren && !isLoadingMoreTopLevelReplies) {\n setIsLoadingMoreTopLevelReplies(true);\n try {\n await loadMoreChildren();\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Failed to load more top-level replies:', error);\n } finally {\n setIsLoadingMoreTopLevelReplies(false);\n }\n }\n }, {\n root: container,\n rootMargin: '200px'\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 }, [hasMoreChildren, isLoadingMoreTopLevelReplies, loadMoreChildren]);\n\n if (isLoading) {\n return (\n <Layout>\n <div className='mx-auto flex max-w-[620px] flex-col items-center gap-3 pt-9 lg:px-8'>\n <div className='flex w-full items-center gap-3'>\n <Skeleton className='size-10 rounded-full' />\n <div className='grow pt-1'>\n <Skeleton className='w-24' />\n <Skeleton className='w-3/5' />\n </div>\n </div>\n <div className='mb-7 w-full'>\n <Skeleton />\n <Skeleton className='w-4/5' />\n <Skeleton />\n </div>\n <FeedItemDivider />\n <div className='flex w-full items-center gap-3 py-3'>\n <Skeleton className='block size-full' containerClassName='size-10 rounded-full overflow-hidden' />\n <div>\n <Skeleton className='w-52' />\n <Skeleton className='w-28' />\n </div>\n </div>\n <FeedItemDivider />\n </div>\n </Layout>\n );\n }\n\n if (!currentPost) {\n return (\n <Layout>\n <div className='mx-auto mt-4 flex w-full max-w-[620px] flex-col items-center'>\n <EmptyViewIndicator>\n <EmptyViewIcon><LucideIcon.Hash /></EmptyViewIcon>\n <div>Error loading note.</div>\n </EmptyViewIndicator>\n </div>\n </Layout>\n );\n }\n\n function handleDelete() {\n // Reply count will be updated via cache invalidation\n }\n\n function toggleChain(chainId: string) {\n setExpandedChains((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(chainId)) {\n newSet.delete(chainId);\n } else {\n newSet.add(chainId);\n setFullyExpandedChains((fullyExpanded) => {\n const newFullyExpanded = new Set(fullyExpanded);\n newFullyExpanded.add(chainId);\n return newFullyExpanded;\n });\n }\n return newSet;\n });\n }\n\n async function loadMoreForChain(chainId: string, childIndex: number) {\n if (loadingChains.has(chainId)) {\n return;\n }\n\n setLoadingChains(prev => new Set(prev).add(chainId));\n\n try {\n if (loadMoreChildReplies) {\n await loadMoreChildReplies(childIndex);\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Failed to load more replies for chain:', error);\n } finally {\n setLoadingChains((prev) => {\n const newSet = new Set(prev);\n newSet.delete(chainId);\n return newSet;\n });\n }\n }\n\n return (\n <Layout>\n <div className='mx-auto flex h-full max-w-[620px] flex-col'>\n <div className='relative flex-1'>\n <div className='grow overflow-y-auto'>\n <div className={`mx-auto px-8 pt-5 pb-10 max-lg:px-0`}>\n {!threadParents.length &&\n <ProfilePreviewHoverCard actor={currentPost.actor} isCurrentUser={currentPost.object.authored}>\n <div className={`col-[2/3] mx-auto flex w-full cursor-pointer items-center gap-3 ${canGoBack ? 'pt-10 max-md:pt-5' : 'pt-5'}`}>\n <div className='relative z-10'>\n <APAvatar author={currentPost.actor} showFollowButton={!currentPost.object.authored && !currentPost.actor.followedByMe}/>\n </div>\n <div className='relative z-10 flex w-full min-w-0 cursor-pointer flex-col overflow-visible text-[1.5rem]' onClick={(e) => {\n handleProfileClick(currentPost.actor, navigate, e);\n }}>\n <div className='flex w-full'>\n <span className='min-w-0 truncate font-semibold whitespace-nowrap hover:underline'>{currentPost.actor.name}</span>\n </div>\n <div className='flex w-full'>\n <span className='truncate text-gray-700 after:mx-1 after:font-normal after:text-gray-700 after:content-[\"·\"]'>{getUsername(currentPost.actor)}</span>\n <span className='text-gray-700'>{renderTimestamp(object, !object.authored)}</span>\n </div>\n </div>\n </div>\n </ProfilePreviewHoverCard>\n }\n\n {threadParents.map((item) => {\n return (\n item.object.type === 'Tombstone' ? (\n <DeletedFeedItem last={false} />\n ) : (\n <FeedItem\n actor={item.actor}\n allowDelete={false}\n commentCount={item.object.replyCount ?? 0}\n last={false}\n layout='reply'\n likeCount={item.object.likeCount ?? 0}\n object={item.object}\n repostCount={item.object.repostCount ?? 0}\n type='Note'\n onClick={() => {\n navigate(`/${item.object.type === 'Article' ? 'reader' : 'notes'}/${encodeURIComponent(item.object.id)}`);\n }}\n />\n )\n );\n })}\n <div ref={postRef} className={`${canGoBack ? 'scroll-mt-[12px]' : 'scroll-mt-[124px]'}`}>\n <div className={`${threadParents.length > 0 && 'min-h-[calc(100vh-52px)]'}`}>\n <FeedItem\n actor={currentPost.actor}\n allowDelete={false}\n commentCount={replyCount}\n last={true}\n layout={'modal'}\n likeCount={object.likeCount ?? 0}\n object={object}\n repostCount={object.repostCount}\n showHeader={threadParents.length > 0}\n showStats={true}\n type='Note'\n />\n <APReplyBox\n object={object}\n />\n <FeedItemDivider />\n <div ref={repliesRef}>\n {\n processedReplies.map((replyGroup, groupIndex) => {\n const isLastGroup = groupIndex === processedReplies.length - 1;\n const chainId = replyGroup.mainReply.id;\n const isExpanded = expandedChains.has(chainId);\n const isFullyExpanded = fullyExpandedChains.has(chainId);\n const isChainLoading = loadingChains.has(chainId);\n const hasChain = replyGroup.chain.length > 0;\n\n return (\n <React.Fragment key={replyGroup.mainReply.id}>\n <FeedItem\n actor={replyGroup.mainReply.actor}\n allowDelete={replyGroup.mainReply.object.authored}\n commentCount={replyGroup.mainReply.object.replyCount ?? 0}\n isChainParent={hasChain}\n isPending={isPendingActivity(replyGroup.mainReply.id)}\n last={!hasChain}\n layout='reply'\n likeCount={replyGroup.mainReply.object.likeCount ?? 0}\n object={replyGroup.mainReply.object}\n parentId={object.id}\n repostCount={replyGroup.mainReply.object.repostCount ?? 0}\n type='Note'\n onClick={() => {\n navigate(`/notes/${encodeURIComponent(replyGroup.mainReply.id)}`);\n }}\n onDelete={handleDelete}\n />\n\n {hasChain && replyGroup.chain[0] && (\n <FeedItem\n key={replyGroup.chain[0].id}\n actor={replyGroup.chain[0].actor}\n allowDelete={replyGroup.chain[0].object.authored}\n commentCount={replyGroup.chain[0].object.replyCount ?? 0}\n isChainContinuation={true}\n isPending={isPendingActivity(replyGroup.chain[0].id)}\n last={replyGroup.chain.length === 1}\n layout='reply'\n likeCount={replyGroup.chain[0].object.likeCount ?? 0}\n object={replyGroup.chain[0].object}\n parentId={object.id}\n repostCount={replyGroup.chain[0].object.repostCount ?? 0}\n type='Note'\n onClick={() => {\n navigate(`/notes/${encodeURIComponent(replyGroup.chain[0].id)}`);\n }}\n onDelete={handleDelete}\n />\n )}\n\n {hasChain && isExpanded && replyGroup.chain.slice(1).map((chainItem: Activity, chainIndex: number) => {\n const isLastChainItem = chainIndex === replyGroup.chain.slice(1).length - 1;\n const hasMoreReplies = hasMoreChildReplies && hasMoreChildReplies(groupIndex);\n const shouldShowConnector = isLastChainItem && hasMoreReplies;\n\n return (\n <FeedItem\n key={chainItem.id}\n actor={chainItem.actor}\n allowDelete={chainItem.object.authored}\n commentCount={chainItem.object.replyCount ?? 0}\n isChainContinuation={true}\n isPending={isPendingActivity(chainItem.id)}\n last={isLastChainItem && !shouldShowConnector}\n layout='reply'\n likeCount={chainItem.object.likeCount ?? 0}\n object={chainItem.object}\n parentId={object.id}\n repostCount={chainItem.object.repostCount ?? 0}\n type='Note'\n onClick={() => {\n navigate(`/notes/${encodeURIComponent(chainItem.id)}`);\n }}\n onDelete={handleDelete}\n />\n );\n })}\n\n {hasChain && replyGroup.chain.length > 1 && !isExpanded && (\n <ShowRepliesButton\n variant='expand'\n onClick={() => toggleChain(chainId)}\n />\n )}\n\n {hasChain && isExpanded && isFullyExpanded && hasMoreChildReplies && hasMoreChildReplies(groupIndex) && (\n <ShowRepliesButton\n loading={isChainLoading}\n variant='loadMore'\n onClick={() => loadMoreForChain(chainId, groupIndex)}\n />\n )}\n\n {!isLastGroup && <FeedItemDivider />}\n </React.Fragment>\n );\n })\n }\n\n {isLoadingMoreTopLevelReplies && (\n <div className='flex flex-col items-center justify-center text-center'>\n <LoadingIndicator size='md' />\n </div>\n )}\n </div>\n\n {hasMoreChildren && <div ref={loadMoreRef} className='h-1'></div>}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </Layout>\n );\n};\n\nexport default Note;\n"],"names":["FeedItemDivider","jsx","Note","postId","useParams","canGoBack","useNavigationStack","expandedChains","setExpandedChains","useState","fullyExpandedChains","setFullyExpandedChains","loadingChains","setLoadingChains","isLoadingMoreTopLevelReplies","setIsLoadingMoreTopLevelReplies","repliesRef","useRef","postRef","observerRef","loadMoreRef","navigate","useNavigateWithBasePath","threadParents","currentPost","processedReplies","isLoading","loadMoreChildren","loadMoreChildReplies","hasMoreChildren","hasMoreChildReplies","useReplyChainData","object","replyCount","hasScrolledToPost","setHasScrolledToPost","useEffect","container","entries","error","Layout","jsxs","Skeleton","EmptyViewIndicator","EmptyViewIcon","LucideIcon.Hash","handleDelete","toggleChain","chainId","prev","newSet","fullyExpanded","newFullyExpanded","loadMoreForChain","childIndex","ProfilePreviewHoverCard","APAvatar","e","handleProfileClick","getUsername","item","DeletedFeedItem","FeedItem","APReplyBox","replyGroup","groupIndex","isLastGroup","isExpanded","isFullyExpanded","isChainLoading","hasChain","React","isPendingActivity","chainItem","chainIndex","isLastChainItem","hasMoreReplies","shouldShowConnector","ShowRepliesButton","LoadingIndicator"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { a6 as e } from "./index-DHVdVxus.mjs";
1
+ import { a6 as e } from "./index-BUxTXK58.mjs";
2
2
  /**
3
3
  * @license lucide-react v0.577.0 - ISC
4
4
  *
@@ -12,4 +12,4 @@ const c = [
12
12
  export {
13
13
  a as R
14
14
  };
15
- //# sourceMappingURL=reply-BwjYYb5Y.mjs.map
15
+ //# sourceMappingURL=reply-D3ggZn8x.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"reply-BwjYYb5Y.mjs","sources":["../../../node_modules/.pnpm/lucide-react@0.577.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/reply.js"],"sourcesContent":["/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M20 18v-2a4 4 0 0 0-4-4H4\", key: \"5vmcpk\" }],\n [\"path\", { d: \"m9 17-5-5 5-5\", key: \"nvlc11\" }]\n];\nconst Reply = createLucideIcon(\"reply\", __iconNode);\n\nexport { __iconNode, Reply as default };\n//# sourceMappingURL=reply.js.map\n"],"names":["__iconNode","Reply","createLucideIcon"],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,GAAG,6BAA6B,KAAK,SAAQ,CAAE;AAAA,EAC1D,CAAC,QAAQ,EAAE,GAAG,iBAAiB,KAAK,SAAQ,CAAE;AAChD,GACMC,IAAQC,EAAiB,SAASF,CAAU;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"reply-D3ggZn8x.mjs","sources":["../../../node_modules/.pnpm/lucide-react@0.577.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/reply.js"],"sourcesContent":["/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M20 18v-2a4 4 0 0 0-4-4H4\", key: \"5vmcpk\" }],\n [\"path\", { d: \"m9 17-5-5 5-5\", key: \"nvlc11\" }]\n];\nconst Reply = createLucideIcon(\"reply\", __iconNode);\n\nexport { __iconNode, Reply as default };\n//# sourceMappingURL=reply.js.map\n"],"names":["__iconNode","Reply","createLucideIcon"],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,GAAG,6BAA6B,KAAK,SAAQ,CAAE;AAAA,EAC1D,CAAC,QAAQ,EAAE,GAAG,iBAAiB,KAAK,SAAQ,CAAE;AAChD,GACMC,IAAQC,EAAiB,SAASF,CAAU;","x_google_ignoreList":[0]}
@@ -1,4 +1,4 @@
1
- import { ae as s, j as l, af as v, s as m } from "./index-DHVdVxus.mjs";
1
+ import { ae as s, j as l, af as v, s as m } from "./index-BUxTXK58.mjs";
2
2
  var N = "Separator", n = "horizontal", f = ["horizontal", "vertical"], p = s((a, r) => {
3
3
  const { decorative: t, orientation: o = n, ...i } = a, e = u(o) ? o : n, d = t ? { role: "none" } : { "aria-orientation": e === "vertical" ? e : void 0, role: "separator" };
4
4
  return /* @__PURE__ */ l.jsx(
@@ -36,4 +36,4 @@ h.displayName = c.displayName;
36
36
  export {
37
37
  h as S
38
38
  };
39
- //# sourceMappingURL=separator-CdEv3ahM.mjs.map
39
+ //# sourceMappingURL=separator-BvykMnKw.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"separator-CdEv3ahM.mjs","sources":["../../../node_modules/.pnpm/@radix-ui+react-separator@1.1.8_@types+react-dom@18.3.7_@types+react@18.3.28__@types+re_65503dc6cee771df7e5ad7e8522dc4b5/node_modules/@radix-ui/react-separator/dist/index.mjs","../../shade/es/components/ui/separator.js"],"sourcesContent":["// src/separator.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Separator\";\nvar DEFAULT_ORIENTATION = \"horizontal\";\nvar ORIENTATIONS = [\"horizontal\", \"vertical\"];\nvar Separator = React.forwardRef((props, forwardedRef) => {\n const { decorative, orientation: orientationProp = DEFAULT_ORIENTATION, ...domProps } = props;\n const orientation = isValidOrientation(orientationProp) ? orientationProp : DEFAULT_ORIENTATION;\n const ariaOrientation = orientation === \"vertical\" ? orientation : void 0;\n const semanticProps = decorative ? { role: \"none\" } : { \"aria-orientation\": ariaOrientation, role: \"separator\" };\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-orientation\": orientation,\n ...semanticProps,\n ...domProps,\n ref: forwardedRef\n }\n );\n});\nSeparator.displayName = NAME;\nfunction isValidOrientation(orientation) {\n return ORIENTATIONS.includes(orientation);\n}\nvar Root = Separator;\nexport {\n Root,\n Separator\n};\n//# sourceMappingURL=index.mjs.map\n","import { jsx } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\nimport { cn } from \"../../lib/ds-utils.js\";\nimport \"moment-timezone\";\nimport \"validator/es/lib/isEmail\";\nconst Separator = React.forwardRef(\n ({ className, orientation = \"horizontal\", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx(\n SeparatorPrimitive.Root,\n {\n ref,\n className: cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n ),\n decorative,\n orientation,\n ...props\n }\n )\n);\nSeparator.displayName = SeparatorPrimitive.Root.displayName;\nexport {\n Separator\n};\n//# sourceMappingURL=separator.js.map\n"],"names":["NAME","DEFAULT_ORIENTATION","ORIENTATIONS","Separator","React.forwardRef","props","forwardedRef","decorative","orientationProp","domProps","orientation","isValidOrientation","semanticProps","jsx","Primitive","Root","className","ref","SeparatorPrimitive.Root","cn"],"mappings":";AAIA,IAAIA,IAAO,aACPC,IAAsB,cACtBC,IAAe,CAAC,cAAc,UAAU,GACxCC,IAAYC,EAAiB,CAACC,GAAOC,MAAiB;AACxD,QAAM,EAAE,YAAAC,GAAY,aAAaC,IAAkBP,GAAqB,GAAGQ,EAAQ,IAAKJ,GAClFK,IAAcC,EAAmBH,CAAe,IAAIA,IAAkBP,GAEtEW,IAAgBL,IAAa,EAAE,MAAM,WAAW,EAAE,oBADhCG,MAAgB,aAAaA,IAAc,QAC0B,MAAM,YAAW;AAC9G,SAAuBG,gBAAAA,EAAAA;AAAAA,IACrBC,EAAU;AAAA,IACV;AAAA,MACE,oBAAoBJ;AAAA,MACpB,GAAGE;AAAA,MACH,GAAGH;AAAA,MACH,KAAKH;AAAA,IACX;AAAA,EACA;AACA,CAAC;AACDH,EAAU,cAAcH;AACxB,SAASW,EAAmBD,GAAa;AACvC,SAAOR,EAAa,SAASQ,CAAW;AAC1C;AACA,IAAIK,IAAOZ;ACpBN,MAACA,IAAYC;AAAAA,EAChB,CAAC,EAAE,WAAAY,GAAW,aAAAN,IAAc,cAAc,YAAAH,IAAa,IAAM,GAAGF,KAASY,MAAwBJ,gBAAAA,EAAAA;AAAAA,IAC/FK;AAAAA,IACA;AAAA,MACE,KAAAD;AAAA,MACA,WAAWE;AAAA,QACT;AAAA,QACAT,MAAgB,eAAe,mBAAmB;AAAA,QAClDM;AAAA,MACR;AAAA,MACM,YAAAT;AAAA,MACA,aAAAG;AAAA,MACA,GAAGL;AAAA,IACT;AAAA,EACA;AACA;AACAF,EAAU,cAAce,EAAwB;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"separator-BvykMnKw.mjs","sources":["../../../node_modules/.pnpm/@radix-ui+react-separator@1.1.8_@types+react-dom@18.3.7_@types+react@18.3.28__@types+re_65503dc6cee771df7e5ad7e8522dc4b5/node_modules/@radix-ui/react-separator/dist/index.mjs","../../shade/es/components/ui/separator.js"],"sourcesContent":["// src/separator.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Separator\";\nvar DEFAULT_ORIENTATION = \"horizontal\";\nvar ORIENTATIONS = [\"horizontal\", \"vertical\"];\nvar Separator = React.forwardRef((props, forwardedRef) => {\n const { decorative, orientation: orientationProp = DEFAULT_ORIENTATION, ...domProps } = props;\n const orientation = isValidOrientation(orientationProp) ? orientationProp : DEFAULT_ORIENTATION;\n const ariaOrientation = orientation === \"vertical\" ? orientation : void 0;\n const semanticProps = decorative ? { role: \"none\" } : { \"aria-orientation\": ariaOrientation, role: \"separator\" };\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-orientation\": orientation,\n ...semanticProps,\n ...domProps,\n ref: forwardedRef\n }\n );\n});\nSeparator.displayName = NAME;\nfunction isValidOrientation(orientation) {\n return ORIENTATIONS.includes(orientation);\n}\nvar Root = Separator;\nexport {\n Root,\n Separator\n};\n//# sourceMappingURL=index.mjs.map\n","import { jsx } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\nimport { cn } from \"../../lib/ds-utils.js\";\nimport \"moment-timezone\";\nimport \"validator/es/lib/isEmail\";\nconst Separator = React.forwardRef(\n ({ className, orientation = \"horizontal\", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx(\n SeparatorPrimitive.Root,\n {\n ref,\n className: cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n ),\n decorative,\n orientation,\n ...props\n }\n )\n);\nSeparator.displayName = SeparatorPrimitive.Root.displayName;\nexport {\n Separator\n};\n//# sourceMappingURL=separator.js.map\n"],"names":["NAME","DEFAULT_ORIENTATION","ORIENTATIONS","Separator","React.forwardRef","props","forwardedRef","decorative","orientationProp","domProps","orientation","isValidOrientation","semanticProps","jsx","Primitive","Root","className","ref","SeparatorPrimitive.Root","cn"],"mappings":";AAIA,IAAIA,IAAO,aACPC,IAAsB,cACtBC,IAAe,CAAC,cAAc,UAAU,GACxCC,IAAYC,EAAiB,CAACC,GAAOC,MAAiB;AACxD,QAAM,EAAE,YAAAC,GAAY,aAAaC,IAAkBP,GAAqB,GAAGQ,EAAQ,IAAKJ,GAClFK,IAAcC,EAAmBH,CAAe,IAAIA,IAAkBP,GAEtEW,IAAgBL,IAAa,EAAE,MAAM,WAAW,EAAE,oBADhCG,MAAgB,aAAaA,IAAc,QAC0B,MAAM,YAAW;AAC9G,SAAuBG,gBAAAA,EAAAA;AAAAA,IACrBC,EAAU;AAAA,IACV;AAAA,MACE,oBAAoBJ;AAAA,MACpB,GAAGE;AAAA,MACH,GAAGH;AAAA,MACH,KAAKH;AAAA,IACX;AAAA,EACA;AACA,CAAC;AACDH,EAAU,cAAcH;AACxB,SAASW,EAAmBD,GAAa;AACvC,SAAOR,EAAa,SAASQ,CAAW;AAC1C;AACA,IAAIK,IAAOZ;ACpBN,MAACA,IAAYC;AAAAA,EAChB,CAAC,EAAE,WAAAY,GAAW,aAAAN,IAAc,cAAc,YAAAH,IAAa,IAAM,GAAGF,KAASY,MAAwBJ,gBAAAA,EAAAA;AAAAA,IAC/FK;AAAAA,IACA;AAAA,MACE,KAAAD;AAAA,MACA,WAAWE;AAAA,QACT;AAAA,QACAT,MAAgB,eAAe,mBAAmB;AAAA,QAClDM;AAAA,MACR;AAAA,MACM,YAAAT;AAAA,MACA,aAAAG;AAAA,MACA,GAAGL;AAAA,IACT;AAAA,EACA;AACA;AACAF,EAAU,cAAce,EAAwB;","x_google_ignoreList":[0]}
@@ -1,5 +1,5 @@
1
- import { b as f, d as p, j as e, H as b, D as m, m as u, B as v, n as y, o as N, p as k, C as j, q as S, s as C, t as E } from "./index-DHVdVxus.mjs";
2
- import { E as D } from "./edit-profile-BJDgAblO.mjs";
1
+ import { b as f, d as p, j as e, H as b, D as m, m as u, B as v, n as y, o as N, p as k, C as j, q as S, s as C, t as E } from "./index-BUxTXK58.mjs";
2
+ import { E as D } from "./edit-profile-CNx9VFB0.mjs";
3
3
  const z = ({ account: s, className: r = "" }) => {
4
4
  const [h, t] = f(!1), a = p();
5
5
  return /* @__PURE__ */ e.jsxs("div", { className: `flex flex-col ${r}`, children: [
@@ -76,4 +76,4 @@ export {
76
76
  x as S,
77
77
  z as a
78
78
  };
79
- //# sourceMappingURL=settings-BdWI832x.mjs.map
79
+ //# sourceMappingURL=settings-DC22q-Jw.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-BdWI832x.mjs","sources":["../src/views/preferences/components/settings.tsx"],"sourcesContent":["import EditProfile from './edit-profile';\nimport React, {useState} from 'react';\nimport {Account} from '@src/api/activitypub';\nimport {Button, Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger} from '@tryghost/shade/components';\nimport {H4} from '@tryghost/shade/primitives';\nimport {Link} from '@tryghost/admin-x-framework';\nimport {LucideIcon, cn} from '@tryghost/shade/utils';\nimport {useNavigateWithBasePath} from '@src/hooks/use-navigate-with-base-path';\n\ninterface SettingsProps {\n account?: Account;\n className?: string;\n}\n\nconst Settings: React.FC<SettingsProps> = ({account, className = ''}) => {\n const [isEditingProfile, setIsEditingProfile] = useState(false);\n const navigate = useNavigateWithBasePath();\n\n return (\n <div className={`flex flex-col ${className}`}>\n <SettingSeparator />\n <SettingItem>\n <SettingHeader>\n <SettingTitle>Account</SettingTitle>\n <SettingDescription>\n Edit your profile information and account details\n </SettingDescription>\n </SettingHeader>\n <Dialog open={isEditingProfile} onOpenChange={setIsEditingProfile}>\n <DialogTrigger>\n <SettingAction><Button variant='secondary'>Edit profile</Button></SettingAction>\n </DialogTrigger>\n <DialogContent 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 </SettingItem>\n <SettingItem withHover onClick={() => navigate('/preferences/moderation')}>\n <SettingHeader>\n <SettingTitle>Moderation</SettingTitle>\n <SettingDescription>Manage blocked users and domains</SettingDescription>\n </SettingHeader>\n <SettingAction className='flex items-center gap-2'>\n <LucideIcon.ChevronRight size={20} />\n </SettingAction>\n </SettingItem>\n <SettingItem withHover onClick={() => navigate('/preferences/bluesky-sharing')}>\n <SettingHeader>\n <SettingTitle>Bluesky sharing</SettingTitle>\n <SettingDescription>Share content directly on Bluesky</SettingDescription>\n </SettingHeader>\n <SettingAction className='flex items-center gap-2'>\n {account?.blueskyEnabled ? <span className='font-medium text-black'>On</span> : <span>Off</span>}\n <LucideIcon.ChevronRight size={20} />\n </SettingAction>\n </SettingItem>\n <SettingSeparator />\n <SettingItem href='https://ghost.org/help/social-web/' withHover>\n <SettingHeader>\n <SettingTitle>Help</SettingTitle>\n <SettingDescription>Social web guides and support resources</SettingDescription>\n </SettingHeader>\n <SettingAction><LucideIcon.ExternalLink size={18} /></SettingAction>\n </SettingItem>\n </div>\n );\n};\n\nconst SettingTitle = H4;\n\ninterface SettingDescriptionProps {\n children: React.ReactNode;\n className?: string;\n}\n\nconst SettingDescription: React.FC<SettingDescriptionProps> = ({children, className = ''}) => {\n return (\n <span className={`text-sm text-gray-700 ${className}`}>\n {children}\n </span>\n );\n};\n\ninterface SettingHeaderProps {\n children: React.ReactNode;\n className?: string;\n}\n\nconst SettingHeader: React.FC<SettingHeaderProps> = ({children, className = ''}) => {\n return (\n <div className={`relative flex flex-col gap-0.5 ${className}`}>\n {children}\n </div>\n );\n};\n\ninterface SettingActionProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const SettingAction: React.FC<SettingActionProps> = ({children, className = ''}) => {\n return (\n <div className={`relative text-gray-500 ${className}`}>\n {children}\n </div>\n );\n};\n\ninterface SettingItemProps {\n children: React.ReactNode;\n className?: string;\n withHover?: boolean;\n to?: string;\n href?: string;\n onClick?: () => void;\n}\n\nconst SettingItem: React.FC<SettingItemProps> = ({children, className = '', withHover = false, to, href, onClick}) => {\n const baseClasses = 'flex items-center justify-between py-3 gap-4';\n const hoverClasses = withHover ? 'relative cursor-pointer before:absolute before:inset-x-[-16px] before:inset-y-[-1px] before:rounded-md before:bg-gray-50 before:opacity-0 before:transition-opacity before:will-change-[opacity] hover:z-10 hover:cursor-pointer hover:border-b-transparent hover:before:opacity-100 dark:before:bg-gray-950' : '';\n const itemClasses = cn(baseClasses, hoverClasses, className);\n\n if (to) {\n return (\n <Link\n className={itemClasses}\n to={to}\n >\n {children}\n </Link>\n );\n }\n\n if (href) {\n return (\n <a\n className={itemClasses}\n href={href}\n rel='noreferrer'\n target='_blank'\n >\n {children}\n </a>\n );\n }\n\n if (onClick) {\n return (\n <div\n className={itemClasses}\n role=\"button\"\n tabIndex={0}\n onClick={onClick}\n >\n {children}\n </div>\n );\n }\n\n return (\n <div className={itemClasses}>\n {children}\n </div>\n );\n};\n\nconst SettingSeparator: React.FC = () => {\n return (\n <hr className='my-3 h-px border-0 bg-gray-200 dark:bg-gray-950' />\n );\n};\n\nexport default Settings;\n"],"names":["Settings","account","className","isEditingProfile","setIsEditingProfile","useState","navigate","useNavigateWithBasePath","jsxs","jsx","SettingSeparator","SettingItem","SettingHeader","SettingTitle","SettingDescription","Dialog","DialogTrigger","SettingAction","Button","DialogContent","e","DialogHeader","DialogTitle","EditProfile","LucideIcon.ChevronRight","LucideIcon.ExternalLink","H4","children","withHover","to","href","onClick","itemClasses","cn","Link"],"mappings":"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"}
1
+ {"version":3,"file":"settings-DC22q-Jw.mjs","sources":["../src/views/preferences/components/settings.tsx"],"sourcesContent":["import EditProfile from './edit-profile';\nimport React, {useState} from 'react';\nimport {Account} from '@src/api/activitypub';\nimport {Button, Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger} from '@tryghost/shade/components';\nimport {H4} from '@tryghost/shade/primitives';\nimport {Link} from '@tryghost/admin-x-framework';\nimport {LucideIcon, cn} from '@tryghost/shade/utils';\nimport {useNavigateWithBasePath} from '@src/hooks/use-navigate-with-base-path';\n\ninterface SettingsProps {\n account?: Account;\n className?: string;\n}\n\nconst Settings: React.FC<SettingsProps> = ({account, className = ''}) => {\n const [isEditingProfile, setIsEditingProfile] = useState(false);\n const navigate = useNavigateWithBasePath();\n\n return (\n <div className={`flex flex-col ${className}`}>\n <SettingSeparator />\n <SettingItem>\n <SettingHeader>\n <SettingTitle>Account</SettingTitle>\n <SettingDescription>\n Edit your profile information and account details\n </SettingDescription>\n </SettingHeader>\n <Dialog open={isEditingProfile} onOpenChange={setIsEditingProfile}>\n <DialogTrigger>\n <SettingAction><Button variant='secondary'>Edit profile</Button></SettingAction>\n </DialogTrigger>\n <DialogContent 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 </SettingItem>\n <SettingItem withHover onClick={() => navigate('/preferences/moderation')}>\n <SettingHeader>\n <SettingTitle>Moderation</SettingTitle>\n <SettingDescription>Manage blocked users and domains</SettingDescription>\n </SettingHeader>\n <SettingAction className='flex items-center gap-2'>\n <LucideIcon.ChevronRight size={20} />\n </SettingAction>\n </SettingItem>\n <SettingItem withHover onClick={() => navigate('/preferences/bluesky-sharing')}>\n <SettingHeader>\n <SettingTitle>Bluesky sharing</SettingTitle>\n <SettingDescription>Share content directly on Bluesky</SettingDescription>\n </SettingHeader>\n <SettingAction className='flex items-center gap-2'>\n {account?.blueskyEnabled ? <span className='font-medium text-black'>On</span> : <span>Off</span>}\n <LucideIcon.ChevronRight size={20} />\n </SettingAction>\n </SettingItem>\n <SettingSeparator />\n <SettingItem href='https://ghost.org/help/social-web/' withHover>\n <SettingHeader>\n <SettingTitle>Help</SettingTitle>\n <SettingDescription>Social web guides and support resources</SettingDescription>\n </SettingHeader>\n <SettingAction><LucideIcon.ExternalLink size={18} /></SettingAction>\n </SettingItem>\n </div>\n );\n};\n\nconst SettingTitle = H4;\n\ninterface SettingDescriptionProps {\n children: React.ReactNode;\n className?: string;\n}\n\nconst SettingDescription: React.FC<SettingDescriptionProps> = ({children, className = ''}) => {\n return (\n <span className={`text-sm text-gray-700 ${className}`}>\n {children}\n </span>\n );\n};\n\ninterface SettingHeaderProps {\n children: React.ReactNode;\n className?: string;\n}\n\nconst SettingHeader: React.FC<SettingHeaderProps> = ({children, className = ''}) => {\n return (\n <div className={`relative flex flex-col gap-0.5 ${className}`}>\n {children}\n </div>\n );\n};\n\ninterface SettingActionProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const SettingAction: React.FC<SettingActionProps> = ({children, className = ''}) => {\n return (\n <div className={`relative text-gray-500 ${className}`}>\n {children}\n </div>\n );\n};\n\ninterface SettingItemProps {\n children: React.ReactNode;\n className?: string;\n withHover?: boolean;\n to?: string;\n href?: string;\n onClick?: () => void;\n}\n\nconst SettingItem: React.FC<SettingItemProps> = ({children, className = '', withHover = false, to, href, onClick}) => {\n const baseClasses = 'flex items-center justify-between py-3 gap-4';\n const hoverClasses = withHover ? 'relative cursor-pointer before:absolute before:inset-x-[-16px] before:inset-y-[-1px] before:rounded-md before:bg-gray-50 before:opacity-0 before:transition-opacity before:will-change-[opacity] hover:z-10 hover:cursor-pointer hover:border-b-transparent hover:before:opacity-100 dark:before:bg-gray-950' : '';\n const itemClasses = cn(baseClasses, hoverClasses, className);\n\n if (to) {\n return (\n <Link\n className={itemClasses}\n to={to}\n >\n {children}\n </Link>\n );\n }\n\n if (href) {\n return (\n <a\n className={itemClasses}\n href={href}\n rel='noreferrer'\n target='_blank'\n >\n {children}\n </a>\n );\n }\n\n if (onClick) {\n return (\n <div\n className={itemClasses}\n role=\"button\"\n tabIndex={0}\n onClick={onClick}\n >\n {children}\n </div>\n );\n }\n\n return (\n <div className={itemClasses}>\n {children}\n </div>\n );\n};\n\nconst SettingSeparator: React.FC = () => {\n return (\n <hr className='my-3 h-px border-0 bg-gray-200 dark:bg-gray-950' />\n );\n};\n\nexport default Settings;\n"],"names":["Settings","account","className","isEditingProfile","setIsEditingProfile","useState","navigate","useNavigateWithBasePath","jsxs","jsx","SettingSeparator","SettingItem","SettingHeader","SettingTitle","SettingDescription","Dialog","DialogTrigger","SettingAction","Button","DialogContent","e","DialogHeader","DialogTitle","EditProfile","LucideIcon.ChevronRight","LucideIcon.ExternalLink","H4","children","withHover","to","href","onClick","itemClasses","cn","Link"],"mappings":"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"}