@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,5 +1,5 @@
|
|
|
1
|
-
import { v as F, w as T, x as _, y as E, b as x, z as H, G as V, d as W, j as e, L as R, I as $, N as p, J as v, K as w, P as z, M as f, h as G, A as J, S as t, B as c, O as i } from "./index-
|
|
2
|
-
import { T as K, a as O, b as N, c as g } from "./tabs-
|
|
1
|
+
import { v as F, w as T, x as _, y as E, b as x, z as H, G as V, d as W, j as e, L as R, I as $, N as p, J as v, K as w, P as z, M as f, h as G, A as J, S as t, B as c, O as i } from "./index-DIicyWvr.mjs";
|
|
2
|
+
import { T as K, a as O, b as N, c as g } from "./tabs-ROut24vi.mjs";
|
|
3
3
|
const X = () => {
|
|
4
4
|
const { data: d, isLoading: n } = F("index"), { data: u, isLoading: o } = T("index"), m = n ? Array(5).fill({ apId: "", name: "", handle: "", avatarUrl: "" }) : (d == null ? void 0 : d.pages.flatMap((s) => s.accounts)) ?? [], h = o ? Array(5).fill({ apId: "", name: "" }) : (u == null ? void 0 : u.pages.flatMap((s) => s.domains)) ?? [], I = _("index"), U = E("index"), [M, k] = x(/* @__PURE__ */ new Set()), B = H("index"), y = V("index"), [S, b] = x(/* @__PURE__ */ new Set()), [j, r] = x(null), L = W(), A = (s) => {
|
|
5
5
|
k((l) => {
|
|
@@ -110,4 +110,4 @@ const X = () => {
|
|
|
110
110
|
export {
|
|
111
111
|
X as default
|
|
112
112
|
};
|
|
113
|
-
//# sourceMappingURL=moderation-
|
|
113
|
+
//# sourceMappingURL=moderation-B0rtiaEH.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moderation-KWQp9gQj.mjs","sources":["../src/views/preferences/components/moderation.tsx"],"sourcesContent":["import APAvatar from '@components/global/ap-avatar';\nimport ActivityItem from '@components/activities/activity-item';\nimport Layout from '@components/layout';\nimport ProfilePreviewHoverCard from '@components/global/profile-preview-hover-card';\nimport React, {useState} from 'react';\nimport {Account} from '@src/api/activitypub';\nimport {Button, H2, LucideIcon, NoValueLabel, NoValueLabelIcon, Skeleton, Tabs, TabsContent, TabsList, TabsTrigger} from '@tryghost/shade';\nimport {handleProfileClick} from '@src/utils/handle-profile-click';\nimport {toast} from 'sonner';\nimport {useBlockDomainMutationForUser, useBlockMutationForUser, useBlockedAccountsForUser, useBlockedDomainsForUser, useUnblockDomainMutationForUser, useUnblockMutationForUser} from '@hooks/use-activity-pub-queries';\nimport {useNavigateWithBasePath} from '@src/hooks/use-navigate-with-base-path';\n\nconst Moderation: React.FC = () => {\n const {data: blockedAccountsData, isLoading: blockedAccountsLoading} = useBlockedAccountsForUser('index');\n const {data: blockedDomainsData, isLoading: blockedDomainsLoading} = useBlockedDomainsForUser('index');\n\n const blockedAccounts = blockedAccountsLoading\n ? Array(5).fill({apId: '', name: '', handle: '', avatarUrl: ''})\n : blockedAccountsData?.pages.flatMap(page => page.accounts) ?? [];\n const blockedDomains = blockedDomainsLoading\n ? Array(5).fill({apId: '', name: ''})\n : blockedDomainsData?.pages.flatMap(page => page.domains) ?? [];\n\n const blockMutation = useBlockMutationForUser('index');\n const unblockMutation = useUnblockMutationForUser('index');\n const [unblockedAccountIds, setUnblockedAccountIds] = useState<Set<string>>(new Set());\n\n const blockDomainMutation = useBlockDomainMutationForUser('index');\n const unblockDomainMutation = useUnblockDomainMutationForUser('index');\n const [unblockedDomainIds, setUnblockedDomainIds] = useState<Set<string>>(new Set());\n\n const [hoveredItemId, setHoveredItemId] = useState<string | null>(null);\n const navigate = useNavigateWithBasePath();\n\n const handleUnblock = (account: Account) => {\n setUnblockedAccountIds((prev) => {\n const newSet = new Set([...prev]);\n newSet.add(account.apId);\n return newSet;\n });\n\n unblockMutation.mutate(account);\n\n toast.success('User unblocked');\n };\n\n const handleBlock = (account: Account) => {\n setUnblockedAccountIds((prev) => {\n const newSet = new Set([...prev]);\n newSet.delete(account.apId);\n return newSet;\n });\n\n blockMutation.mutate(account);\n\n toast.success('User blocked');\n };\n\n const handleDomainUnblock = (domain: {url: string}) => {\n setUnblockedDomainIds((prev) => {\n const newSet = new Set([...prev]);\n newSet.add(domain.url);\n return newSet;\n });\n\n unblockDomainMutation.mutate({url: domain.url});\n\n toast.success('Domain unblocked');\n };\n\n const handleDomainBlock = (domain: {url: string}) => {\n setUnblockedDomainIds((prev) => {\n const newSet = new Set([...prev]);\n newSet.delete(domain.url);\n return newSet;\n });\n\n blockDomainMutation.mutate({url: domain.url});\n\n toast.success('Domain blocked');\n };\n\n return (\n <Layout>\n <div className='mx-auto max-w-[620px] py-[min(4vh,48px)]'>\n <div className='flex items-center justify-between gap-8'>\n <H2>Moderation</H2>\n </div>\n <div className='mt-6'>\n <Tabs defaultValue=\"blocked_users\" variant='underline'>\n <TabsList>\n <TabsTrigger value=\"blocked_users\">Blocked users</TabsTrigger>\n <TabsTrigger value=\"blocked_domains\">Blocked domains</TabsTrigger>\n </TabsList>\n <TabsContent className='mt-2' value=\"blocked_users\">\n {!blockedAccountsLoading && blockedAccounts.length === 0 ? (\n <NoValueLabel>\n <NoValueLabelIcon><LucideIcon.Ban /></NoValueLabelIcon>\n <div className='mt-2 flex max-w-[400px] flex-col items-center gap-1 text-center'>\n <p>When you block someone, they won't be able to follow you or interact with your content on the social web.</p>\n </div>\n </NoValueLabel>\n ) : (\n blockedAccounts.map((account, index) => (\n <ProfilePreviewHoverCard key={account.apId ? account.apId : `loading-${index}`} actor={account} isCurrentUser={true}>\n <div>\n <ActivityItem\n onClick={!blockedAccountsLoading ? () => handleProfileClick(account.handle, navigate) : undefined}\n >\n <APAvatar\n author={\n {\n icon: {\n url: account.avatarUrl\n },\n name: account.name,\n handle: account.handle\n }\n } />\n <div className='flex min-w-0 flex-col'>\n <span className='block truncate font-semibold text-black dark:text-white'>{!blockedAccountsLoading ? account.name : <Skeleton className='w-24' />}</span>\n <span className='block truncate text-sm text-gray-600'>{!blockedAccountsLoading ? account.handle : <Skeleton className='w-40' />}</span>\n </div>\n\n {unblockedAccountIds.has(account.apId) ? (\n <Button\n className='ml-auto min-w-[90px] text-red hover:!bg-red/5 hover:text-red-400'\n variant='outline'\n onClick={(e) => {\n e.stopPropagation();\n handleBlock(account);\n }}\n >\n Block\n </Button>\n ) : (\n !blockedAccountsLoading ?\n <Button\n className='ml-auto min-w-[90px]'\n variant='destructive'\n onClick={(e) => {\n e.stopPropagation();\n handleUnblock(account);\n }}\n onMouseEnter={() => setHoveredItemId(account.apId)}\n onMouseLeave={() => setHoveredItemId(null)}\n >\n {hoveredItemId === account.apId ? 'Unblock' : 'Blocked'}\n </Button> :\n <div className='ml-auto w-16'>\n <Skeleton />\n </div>\n )}\n </ActivityItem>\n </div>\n </ProfilePreviewHoverCard>\n ))\n )}\n </TabsContent>\n <TabsContent className='mt-[11px]' value=\"blocked_domains\">\n {!blockedDomainsLoading && blockedDomains.length === 0 ? (\n <NoValueLabel>\n <NoValueLabelIcon><LucideIcon.Ban /></NoValueLabelIcon>\n <div className='mt-2 flex max-w-[400px] flex-col items-center gap-1 text-center'>\n <p>When you block a domain, all users from that domain won't be able to follow you or interact with your content.</p>\n </div>\n </NoValueLabel>\n ) : (\n blockedDomains.map((domain, index) => (\n <ActivityItem key={domain.url ? domain.url : `loading-${index}`}>\n <div className='flex min-w-0 flex-col'>\n <span className='block truncate font-semibold text-black dark:text-white'>\n {!blockedDomainsLoading ? new URL(domain.url).hostname : <Skeleton className='w-48' />}\n </span>\n </div>\n\n {unblockedDomainIds.has(domain.url) ? (\n <Button\n className='ml-auto min-w-[90px] text-red hover:!bg-red/5 hover:text-red-400'\n variant='outline'\n onClick={() => handleDomainBlock(domain)}\n >\n Block\n </Button>\n ) : (\n !blockedDomainsLoading ?\n <Button\n className='ml-auto min-w-[90px]'\n variant='destructive'\n onClick={() => handleDomainUnblock(domain)}\n onMouseEnter={() => setHoveredItemId(domain.url)}\n onMouseLeave={() => setHoveredItemId(null)}\n >\n {hoveredItemId === domain.url ? 'Unblock' : 'Blocked'}\n </Button> :\n <div className='ml-auto w-16'>\n <Skeleton />\n </div>\n )}\n </ActivityItem>\n ))\n )}\n </TabsContent>\n </Tabs>\n </div>\n </div>\n </Layout>\n );\n};\n\nexport default Moderation;\n"],"names":["Moderation","blockedAccountsData","blockedAccountsLoading","useBlockedAccountsForUser","blockedDomainsData","blockedDomainsLoading","useBlockedDomainsForUser","blockedAccounts","page","blockedDomains","blockMutation","useBlockMutationForUser","unblockMutation","useUnblockMutationForUser","unblockedAccountIds","setUnblockedAccountIds","useState","blockDomainMutation","useBlockDomainMutationForUser","unblockDomainMutation","useUnblockDomainMutationForUser","unblockedDomainIds","setUnblockedDomainIds","hoveredItemId","setHoveredItemId","navigate","useNavigateWithBasePath","handleUnblock","account","prev","newSet","toast","handleBlock","handleDomainUnblock","domain","handleDomainBlock","jsx","Layout","jsxs","H2","Tabs","TabsList","TabsTrigger","TabsContent","NoValueLabel","NoValueLabelIcon","LucideIcon.Ban","index","ProfilePreviewHoverCard","ActivityItem","handleProfileClick","APAvatar","Skeleton","Button","e"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"moderation-B0rtiaEH.mjs","sources":["../src/views/preferences/components/moderation.tsx"],"sourcesContent":["import APAvatar from '@components/global/ap-avatar';\nimport ActivityItem from '@components/activities/activity-item';\nimport Layout from '@components/layout';\nimport ProfilePreviewHoverCard from '@components/global/profile-preview-hover-card';\nimport React, {useState} from 'react';\nimport {Account} from '@src/api/activitypub';\nimport {Button, H2, LucideIcon, NoValueLabel, NoValueLabelIcon, Skeleton, Tabs, TabsContent, TabsList, TabsTrigger} from '@tryghost/shade';\nimport {handleProfileClick} from '@src/utils/handle-profile-click';\nimport {toast} from 'sonner';\nimport {useBlockDomainMutationForUser, useBlockMutationForUser, useBlockedAccountsForUser, useBlockedDomainsForUser, useUnblockDomainMutationForUser, useUnblockMutationForUser} from '@hooks/use-activity-pub-queries';\nimport {useNavigateWithBasePath} from '@src/hooks/use-navigate-with-base-path';\n\nconst Moderation: React.FC = () => {\n const {data: blockedAccountsData, isLoading: blockedAccountsLoading} = useBlockedAccountsForUser('index');\n const {data: blockedDomainsData, isLoading: blockedDomainsLoading} = useBlockedDomainsForUser('index');\n\n const blockedAccounts = blockedAccountsLoading\n ? Array(5).fill({apId: '', name: '', handle: '', avatarUrl: ''})\n : blockedAccountsData?.pages.flatMap(page => page.accounts) ?? [];\n const blockedDomains = blockedDomainsLoading\n ? Array(5).fill({apId: '', name: ''})\n : blockedDomainsData?.pages.flatMap(page => page.domains) ?? [];\n\n const blockMutation = useBlockMutationForUser('index');\n const unblockMutation = useUnblockMutationForUser('index');\n const [unblockedAccountIds, setUnblockedAccountIds] = useState<Set<string>>(new Set());\n\n const blockDomainMutation = useBlockDomainMutationForUser('index');\n const unblockDomainMutation = useUnblockDomainMutationForUser('index');\n const [unblockedDomainIds, setUnblockedDomainIds] = useState<Set<string>>(new Set());\n\n const [hoveredItemId, setHoveredItemId] = useState<string | null>(null);\n const navigate = useNavigateWithBasePath();\n\n const handleUnblock = (account: Account) => {\n setUnblockedAccountIds((prev) => {\n const newSet = new Set([...prev]);\n newSet.add(account.apId);\n return newSet;\n });\n\n unblockMutation.mutate(account);\n\n toast.success('User unblocked');\n };\n\n const handleBlock = (account: Account) => {\n setUnblockedAccountIds((prev) => {\n const newSet = new Set([...prev]);\n newSet.delete(account.apId);\n return newSet;\n });\n\n blockMutation.mutate(account);\n\n toast.success('User blocked');\n };\n\n const handleDomainUnblock = (domain: {url: string}) => {\n setUnblockedDomainIds((prev) => {\n const newSet = new Set([...prev]);\n newSet.add(domain.url);\n return newSet;\n });\n\n unblockDomainMutation.mutate({url: domain.url});\n\n toast.success('Domain unblocked');\n };\n\n const handleDomainBlock = (domain: {url: string}) => {\n setUnblockedDomainIds((prev) => {\n const newSet = new Set([...prev]);\n newSet.delete(domain.url);\n return newSet;\n });\n\n blockDomainMutation.mutate({url: domain.url});\n\n toast.success('Domain blocked');\n };\n\n return (\n <Layout>\n <div className='mx-auto max-w-[620px] py-[min(4vh,48px)]'>\n <div className='flex items-center justify-between gap-8'>\n <H2>Moderation</H2>\n </div>\n <div className='mt-6'>\n <Tabs defaultValue=\"blocked_users\" variant='underline'>\n <TabsList>\n <TabsTrigger value=\"blocked_users\">Blocked users</TabsTrigger>\n <TabsTrigger value=\"blocked_domains\">Blocked domains</TabsTrigger>\n </TabsList>\n <TabsContent className='mt-2' value=\"blocked_users\">\n {!blockedAccountsLoading && blockedAccounts.length === 0 ? (\n <NoValueLabel>\n <NoValueLabelIcon><LucideIcon.Ban /></NoValueLabelIcon>\n <div className='mt-2 flex max-w-[400px] flex-col items-center gap-1 text-center'>\n <p>When you block someone, they won't be able to follow you or interact with your content on the social web.</p>\n </div>\n </NoValueLabel>\n ) : (\n blockedAccounts.map((account, index) => (\n <ProfilePreviewHoverCard key={account.apId ? account.apId : `loading-${index}`} actor={account} isCurrentUser={true}>\n <div>\n <ActivityItem\n onClick={!blockedAccountsLoading ? () => handleProfileClick(account.handle, navigate) : undefined}\n >\n <APAvatar\n author={\n {\n icon: {\n url: account.avatarUrl\n },\n name: account.name,\n handle: account.handle\n }\n } />\n <div className='flex min-w-0 flex-col'>\n <span className='block truncate font-semibold text-black dark:text-white'>{!blockedAccountsLoading ? account.name : <Skeleton className='w-24' />}</span>\n <span className='block truncate text-sm text-gray-600'>{!blockedAccountsLoading ? account.handle : <Skeleton className='w-40' />}</span>\n </div>\n\n {unblockedAccountIds.has(account.apId) ? (\n <Button\n className='ml-auto min-w-[90px] text-red hover:!bg-red/5 hover:text-red-400'\n variant='outline'\n onClick={(e) => {\n e.stopPropagation();\n handleBlock(account);\n }}\n >\n Block\n </Button>\n ) : (\n !blockedAccountsLoading ?\n <Button\n className='ml-auto min-w-[90px]'\n variant='destructive'\n onClick={(e) => {\n e.stopPropagation();\n handleUnblock(account);\n }}\n onMouseEnter={() => setHoveredItemId(account.apId)}\n onMouseLeave={() => setHoveredItemId(null)}\n >\n {hoveredItemId === account.apId ? 'Unblock' : 'Blocked'}\n </Button> :\n <div className='ml-auto w-16'>\n <Skeleton />\n </div>\n )}\n </ActivityItem>\n </div>\n </ProfilePreviewHoverCard>\n ))\n )}\n </TabsContent>\n <TabsContent className='mt-[11px]' value=\"blocked_domains\">\n {!blockedDomainsLoading && blockedDomains.length === 0 ? (\n <NoValueLabel>\n <NoValueLabelIcon><LucideIcon.Ban /></NoValueLabelIcon>\n <div className='mt-2 flex max-w-[400px] flex-col items-center gap-1 text-center'>\n <p>When you block a domain, all users from that domain won't be able to follow you or interact with your content.</p>\n </div>\n </NoValueLabel>\n ) : (\n blockedDomains.map((domain, index) => (\n <ActivityItem key={domain.url ? domain.url : `loading-${index}`}>\n <div className='flex min-w-0 flex-col'>\n <span className='block truncate font-semibold text-black dark:text-white'>\n {!blockedDomainsLoading ? new URL(domain.url).hostname : <Skeleton className='w-48' />}\n </span>\n </div>\n\n {unblockedDomainIds.has(domain.url) ? (\n <Button\n className='ml-auto min-w-[90px] text-red hover:!bg-red/5 hover:text-red-400'\n variant='outline'\n onClick={() => handleDomainBlock(domain)}\n >\n Block\n </Button>\n ) : (\n !blockedDomainsLoading ?\n <Button\n className='ml-auto min-w-[90px]'\n variant='destructive'\n onClick={() => handleDomainUnblock(domain)}\n onMouseEnter={() => setHoveredItemId(domain.url)}\n onMouseLeave={() => setHoveredItemId(null)}\n >\n {hoveredItemId === domain.url ? 'Unblock' : 'Blocked'}\n </Button> :\n <div className='ml-auto w-16'>\n <Skeleton />\n </div>\n )}\n </ActivityItem>\n ))\n )}\n </TabsContent>\n </Tabs>\n </div>\n </div>\n </Layout>\n );\n};\n\nexport default Moderation;\n"],"names":["Moderation","blockedAccountsData","blockedAccountsLoading","useBlockedAccountsForUser","blockedDomainsData","blockedDomainsLoading","useBlockedDomainsForUser","blockedAccounts","page","blockedDomains","blockMutation","useBlockMutationForUser","unblockMutation","useUnblockMutationForUser","unblockedAccountIds","setUnblockedAccountIds","useState","blockDomainMutation","useBlockDomainMutationForUser","unblockDomainMutation","useUnblockDomainMutationForUser","unblockedDomainIds","setUnblockedDomainIds","hoveredItemId","setHoveredItemId","navigate","useNavigateWithBasePath","handleUnblock","account","prev","newSet","toast","handleBlock","handleDomainUnblock","domain","handleDomainBlock","jsx","Layout","jsxs","H2","Tabs","TabsList","TabsTrigger","TabsContent","NoValueLabel","NoValueLabelIcon","LucideIcon.Ban","index","ProfilePreviewHoverCard","ActivityItem","handleProfileClick","APAvatar","Skeleton","Button","e"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { u as G, a as ee, b as m, c as C, d as te, e as $, j as e, L as y, S as c, E as se, f as ne, P as ae, A as oe, g as le, r as ie, h as ce, F as j, R as re, i as R, k as de } from "./index-
|
|
2
|
-
import { u as xe, D as he, A as ue, S as U } from "./deleted-feed-item-
|
|
3
|
-
import { H as me } from "./hash-
|
|
1
|
+
import { u as G, a as ee, b as m, c as C, d as te, e as $, j as e, L as y, S as c, E as se, f as ne, P as ae, A as oe, g as le, r as ie, h as ce, F as j, R as re, i as R, k as de } from "./index-DIicyWvr.mjs";
|
|
2
|
+
import { u as xe, D as he, A as ue, S as U } from "./deleted-feed-item-BkXeOOSC.mjs";
|
|
3
|
+
import { H as me } from "./hash-D_Ql6FHR.mjs";
|
|
4
4
|
const p = () => /* @__PURE__ */ e.jsx("div", { className: "h-px w-full bg-gray-200 dark:bg-gray-950" }), pe = () => {
|
|
5
5
|
const { postId: z } = G(), { canGoBack: k } = ee(), [B, T] = m(/* @__PURE__ */ new Set()), [H, I] = m(/* @__PURE__ */ new Set()), [S, P] = m(/* @__PURE__ */ new Set()), [w, D] = m(!1), V = C(null), v = C(null), r = C(null), g = C(null), u = te(), {
|
|
6
6
|
threadParents: d,
|
|
@@ -246,4 +246,4 @@ const p = () => /* @__PURE__ */ e.jsx("div", { className: "h-px w-full bg-gray-2
|
|
|
246
246
|
export {
|
|
247
247
|
pe as default
|
|
248
248
|
};
|
|
249
|
-
//# sourceMappingURL=note-
|
|
249
|
+
//# sourceMappingURL=note-DjaU27En.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"note-CfQDRkeT.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, LucideIcon, Skeleton} from '@tryghost/shade';\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 pb-10 pt-5 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 whitespace-nowrap font-semibold 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
|
+
{"version":3,"file":"note-DjaU27En.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, LucideIcon, Skeleton} from '@tryghost/shade';\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 pb-10 pt-5 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 whitespace-nowrap font-semibold 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-
|
|
1
|
+
import { a6 as e } from "./index-DIicyWvr.mjs";
|
|
2
2
|
/**
|
|
3
3
|
* @license lucide-react v0.553.0 - ISC
|
|
4
4
|
*
|
|
@@ -12,4 +12,4 @@ const c = [
|
|
|
12
12
|
export {
|
|
13
13
|
a as R
|
|
14
14
|
};
|
|
15
|
-
//# sourceMappingURL=reply-
|
|
15
|
+
//# sourceMappingURL=reply-4cqNFwLY.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reply-
|
|
1
|
+
{"version":3,"file":"reply-4cqNFwLY.mjs","sources":["../../../node_modules/lucide-react/dist/esm/icons/reply.js"],"sourcesContent":["/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"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]}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { aj as u, ay as b, az as c, aA as d, j as f, aB as S, aC as x, aD as P, s as j } from "./index-DIicyWvr.mjs";
|
|
2
|
+
var O = Symbol.for("react.lazy"), y = b[" use ".trim().toString()];
|
|
3
|
+
function R(r) {
|
|
4
|
+
return typeof r == "object" && r !== null && "then" in r;
|
|
5
|
+
}
|
|
6
|
+
function N(r) {
|
|
7
|
+
return r != null && typeof r == "object" && "$$typeof" in r && r.$$typeof === O && "_payload" in r && R(r._payload);
|
|
8
|
+
}
|
|
9
|
+
// @__NO_SIDE_EFFECTS__
|
|
10
|
+
function _(r) {
|
|
11
|
+
const o = /* @__PURE__ */ A(r), e = u((n, t) => {
|
|
12
|
+
let { children: i, ...s } = n;
|
|
13
|
+
N(i) && typeof y == "function" && (i = y(i._payload));
|
|
14
|
+
const a = c.toArray(i), l = a.find(T);
|
|
15
|
+
if (l) {
|
|
16
|
+
const p = l.props.children, E = a.map((m) => m === l ? c.count(p) > 1 ? c.only(null) : d(p) ? p.props.children : null : m);
|
|
17
|
+
return /* @__PURE__ */ f.jsx(o, { ...s, ref: t, children: d(p) ? S(p, void 0, E) : null });
|
|
18
|
+
}
|
|
19
|
+
return /* @__PURE__ */ f.jsx(o, { ...s, ref: t, children: i });
|
|
20
|
+
});
|
|
21
|
+
return e.displayName = `${r}.Slot`, e;
|
|
22
|
+
}
|
|
23
|
+
// @__NO_SIDE_EFFECTS__
|
|
24
|
+
function A(r) {
|
|
25
|
+
const o = u((e, n) => {
|
|
26
|
+
let { children: t, ...i } = e;
|
|
27
|
+
if (N(t) && typeof y == "function" && (t = y(t._payload)), d(t)) {
|
|
28
|
+
const s = $(t), a = I(i, t.props);
|
|
29
|
+
return t.type !== x && (a.ref = n ? P(n, s) : s), S(t, a);
|
|
30
|
+
}
|
|
31
|
+
return c.count(t) > 1 ? c.only(null) : null;
|
|
32
|
+
});
|
|
33
|
+
return o.displayName = `${r}.SlotClone`, o;
|
|
34
|
+
}
|
|
35
|
+
var C = Symbol("radix.slottable");
|
|
36
|
+
function T(r) {
|
|
37
|
+
return d(r) && typeof r.type == "function" && "__radixId" in r.type && r.type.__radixId === C;
|
|
38
|
+
}
|
|
39
|
+
function I(r, o) {
|
|
40
|
+
const e = { ...o };
|
|
41
|
+
for (const n in o) {
|
|
42
|
+
const t = r[n], i = o[n];
|
|
43
|
+
/^on[A-Z]/.test(n) ? t && i ? e[n] = (...a) => {
|
|
44
|
+
const l = i(...a);
|
|
45
|
+
return t(...a), l;
|
|
46
|
+
} : t && (e[n] = t) : n === "style" ? e[n] = { ...t, ...i } : n === "className" && (e[n] = [t, i].filter(Boolean).join(" "));
|
|
47
|
+
}
|
|
48
|
+
return { ...r, ...e };
|
|
49
|
+
}
|
|
50
|
+
function $(r) {
|
|
51
|
+
var n, t;
|
|
52
|
+
let o = (n = Object.getOwnPropertyDescriptor(r.props, "ref")) == null ? void 0 : n.get, e = o && "isReactWarning" in o && o.isReactWarning;
|
|
53
|
+
return e ? r.ref : (o = (t = Object.getOwnPropertyDescriptor(r, "ref")) == null ? void 0 : t.get, e = o && "isReactWarning" in o && o.isReactWarning, e ? r.props.ref : r.props.ref || r.ref);
|
|
54
|
+
}
|
|
55
|
+
var w = [
|
|
56
|
+
"a",
|
|
57
|
+
"button",
|
|
58
|
+
"div",
|
|
59
|
+
"form",
|
|
60
|
+
"h2",
|
|
61
|
+
"h3",
|
|
62
|
+
"img",
|
|
63
|
+
"input",
|
|
64
|
+
"label",
|
|
65
|
+
"li",
|
|
66
|
+
"nav",
|
|
67
|
+
"ol",
|
|
68
|
+
"p",
|
|
69
|
+
"select",
|
|
70
|
+
"span",
|
|
71
|
+
"svg",
|
|
72
|
+
"ul"
|
|
73
|
+
], z = w.reduce((r, o) => {
|
|
74
|
+
const e = /* @__PURE__ */ _(`Primitive.${o}`), n = u((t, i) => {
|
|
75
|
+
const { asChild: s, ...a } = t, l = s ? e : o;
|
|
76
|
+
return typeof window < "u" && (window[Symbol.for("radix-ui")] = !0), /* @__PURE__ */ f.jsx(l, { ...a, ref: i });
|
|
77
|
+
});
|
|
78
|
+
return n.displayName = `Primitive.${o}`, { ...r, [o]: n };
|
|
79
|
+
}, {}), D = "Separator", v = "horizontal", L = ["horizontal", "vertical"], g = u((r, o) => {
|
|
80
|
+
const { decorative: e, orientation: n = v, ...t } = r, i = W(n) ? n : v, a = e ? { role: "none" } : { "aria-orientation": i === "vertical" ? i : void 0, role: "separator" };
|
|
81
|
+
return /* @__PURE__ */ f.jsx(
|
|
82
|
+
z.div,
|
|
83
|
+
{
|
|
84
|
+
"data-orientation": i,
|
|
85
|
+
...a,
|
|
86
|
+
...t,
|
|
87
|
+
ref: o
|
|
88
|
+
}
|
|
89
|
+
);
|
|
90
|
+
});
|
|
91
|
+
g.displayName = D;
|
|
92
|
+
function W(r) {
|
|
93
|
+
return L.includes(r);
|
|
94
|
+
}
|
|
95
|
+
var h = g;
|
|
96
|
+
const V = u(
|
|
97
|
+
({ className: r, orientation: o = "horizontal", decorative: e = !0, ...n }, t) => /* @__PURE__ */ f.jsx(
|
|
98
|
+
h,
|
|
99
|
+
{
|
|
100
|
+
ref: t,
|
|
101
|
+
className: j(
|
|
102
|
+
"shrink-0 bg-border",
|
|
103
|
+
o === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
|
|
104
|
+
r
|
|
105
|
+
),
|
|
106
|
+
decorative: e,
|
|
107
|
+
orientation: o,
|
|
108
|
+
...n
|
|
109
|
+
}
|
|
110
|
+
)
|
|
111
|
+
);
|
|
112
|
+
V.displayName = h.displayName;
|
|
113
|
+
export {
|
|
114
|
+
V as S
|
|
115
|
+
};
|
|
116
|
+
//# sourceMappingURL=separator-Dgj8LPTF.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"separator-Dgj8LPTF.mjs","sources":["../../../node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.mjs","../../../node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.mjs","../../../node_modules/@radix-ui/react-separator/dist/index.mjs","../../shade/es/components/ui/separator.js"],"sourcesContent":["// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\nvar REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nvar use = React[\" use \".trim().toString()];\nfunction isPromiseLike(value) {\n return typeof value === \"object\" && value !== null && \"then\" in value;\n}\nfunction isLazyComponent(element) {\n return element != null && typeof element === \"object\" && \"$$typeof\" in element && element.$$typeof === REACT_LAZY_TYPE && \"_payload\" in element && isPromiseLike(element._payload);\n}\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","// 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/utils.js\";\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":["REACT_LAZY_TYPE","use","React","isPromiseLike","value","isLazyComponent","element","createSlot","ownerName","SlotClone","createSlotClone","Slot2","React.forwardRef","props","forwardedRef","children","slotProps","childrenArray","React.Children","slottable","isSlottable","newElement","newChildren","child","React.isValidElement","jsx","React.cloneElement","childrenRef","getElementRef","props2","mergeProps","React.Fragment","composeRefs","SLOTTABLE_IDENTIFIER","childProps","overrideProps","propName","slotPropValue","childPropValue","args","result","getter","_a","mayWarn","_b","NODES","Primitive","primitive","node","Slot","Node","asChild","primitiveProps","Comp","NAME","DEFAULT_ORIENTATION","ORIENTATIONS","Separator","decorative","orientationProp","domProps","orientation","isValidOrientation","semanticProps","Root","className","ref","SeparatorPrimitive.Root","cn"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
|
@@ -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-
|
|
2
|
-
import { E as D } from "./edit-profile-
|
|
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-DIicyWvr.mjs";
|
|
2
|
+
import { E as D } from "./edit-profile-DdCJ6UkE.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-
|
|
79
|
+
//# sourceMappingURL=settings-qNWc2HyW.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-
|
|
1
|
+
{"version":3,"file":"settings-qNWc2HyW.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, H4, LucideIcon, cn} from '@tryghost/shade';\nimport {Link} from '@tryghost/admin-x-framework';\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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"}
|