@tryghost/activitypub 3.0.8 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/activitypub.js +2 -2
  2. package/dist/{at-sign-Fsk3x72r.mjs → at-sign-l8HMU0fk.mjs} +2 -2
  3. package/dist/{at-sign-Fsk3x72r.mjs.map → at-sign-l8HMU0fk.mjs.map} +1 -1
  4. package/dist/{avatar-flipboard-C10JfFS_.mjs → avatar-flipboard-D12yCmyH.mjs} +2 -2
  5. package/dist/{avatar-flipboard-C10JfFS_.mjs.map → avatar-flipboard-D12yCmyH.mjs.map} +1 -1
  6. package/dist/{bluesky-sharing-C1xeGSL6.mjs → bluesky-sharing-D65sfQFX.mjs} +4 -4
  7. package/dist/{bluesky-sharing-C1xeGSL6.mjs.map → bluesky-sharing-D65sfQFX.mjs.map} +1 -1
  8. package/dist/{copy-C1fElSkQ.mjs → copy-DCHXVz-9.mjs} +2 -2
  9. package/dist/{copy-C1fElSkQ.mjs.map → copy-DCHXVz-9.mjs.map} +1 -1
  10. package/dist/{deleted-feed-item-Bun4tY2_.mjs → deleted-feed-item-BkXeOOSC.mjs} +4 -4
  11. package/dist/{deleted-feed-item-Bun4tY2_.mjs.map → deleted-feed-item-BkXeOOSC.mjs.map} +1 -1
  12. package/dist/{edit-profile-CYh00FZ7.mjs → edit-profile-DdCJ6UkE.mjs} +3 -3
  13. package/dist/{edit-profile-CYh00FZ7.mjs.map → edit-profile-DdCJ6UkE.mjs.map} +1 -1
  14. package/dist/{feed-BxUqmcN9.mjs → feed-D4gYSgoO.mjs} +4 -4
  15. package/dist/{feed-BxUqmcN9.mjs.map → feed-D4gYSgoO.mjs.map} +1 -1
  16. package/dist/{hash-CNgwAx-U.mjs → hash-D_Ql6FHR.mjs} +2 -2
  17. package/dist/{hash-CNgwAx-U.mjs.map → hash-D_Ql6FHR.mjs.map} +1 -1
  18. package/dist/{inbox-DqNqII4a.mjs → inbox-BIeU-G-G.mjs} +2 -2
  19. package/dist/{inbox-DqNqII4a.mjs.map → inbox-BIeU-G-G.mjs.map} +1 -1
  20. package/dist/{index-CJJXnqq1.mjs → index-BlNT1f8K.mjs} +38 -38
  21. package/dist/index-BlNT1f8K.mjs.map +1 -0
  22. package/dist/{index-C9pnotJK.mjs → index-BurflorF.mjs} +466 -375
  23. package/dist/index-BurflorF.mjs.map +1 -0
  24. package/dist/{index-CONoLlDU.mjs → index-BvOcRwis.mjs} +2 -2
  25. package/dist/{index-CONoLlDU.mjs.map → index-BvOcRwis.mjs.map} +1 -1
  26. package/dist/{index-Dvh9q3jy.mjs → index-CPG1Xmp8.mjs} +6 -6
  27. package/dist/{index-Dvh9q3jy.mjs.map → index-CPG1Xmp8.mjs.map} +1 -1
  28. package/dist/{index--Q6orQkb.mjs → index-DIicyWvr.mjs} +10224 -9581
  29. package/dist/index-DIicyWvr.mjs.map +1 -0
  30. package/dist/{index-jhjmoHwu.mjs → index-DK0316YP.mjs} +13 -13
  31. package/dist/{index-jhjmoHwu.mjs.map → index-DK0316YP.mjs.map} +1 -1
  32. package/dist/{index-C3KJXzZE.mjs → index-DiYjJ67s.mjs} +115 -115
  33. package/dist/index-DiYjJ67s.mjs.map +1 -0
  34. package/dist/{index-BueIufRq.mjs → index-l72TqahD.mjs} +5 -5
  35. package/dist/{index-BueIufRq.mjs.map → index-l72TqahD.mjs.map} +1 -1
  36. package/dist/{moderation-CYhwUFi2.mjs → moderation-B0rtiaEH.mjs} +3 -3
  37. package/dist/{moderation-CYhwUFi2.mjs.map → moderation-B0rtiaEH.mjs.map} +1 -1
  38. package/dist/{note-COVa8CMw.mjs → note-DjaU27En.mjs} +4 -4
  39. package/dist/{note-COVa8CMw.mjs.map → note-DjaU27En.mjs.map} +1 -1
  40. package/dist/{reply-BHpKVBxx.mjs → reply-4cqNFwLY.mjs} +2 -2
  41. package/dist/{reply-BHpKVBxx.mjs.map → reply-4cqNFwLY.mjs.map} +1 -1
  42. package/dist/{separator-DP7q5sFH.mjs → separator-Dgj8LPTF.mjs} +12 -12
  43. package/dist/{separator-DP7q5sFH.mjs.map → separator-Dgj8LPTF.mjs.map} +1 -1
  44. package/dist/{settings-3n7zo_3K.mjs → settings-qNWc2HyW.mjs} +3 -3
  45. package/dist/{settings-3n7zo_3K.mjs.map → settings-qNWc2HyW.mjs.map} +1 -1
  46. package/dist/{step-1-BmUukywZ.mjs → step-1-CuRWXSkm.mjs} +12 -12
  47. package/dist/{step-1-BmUukywZ.mjs.map → step-1-CuRWXSkm.mjs.map} +1 -1
  48. package/dist/{step-2-C--I3xxp.mjs → step-2-BsxjLzY8.mjs} +5 -5
  49. package/dist/{step-2-C--I3xxp.mjs.map → step-2-BsxjLzY8.mjs.map} +1 -1
  50. package/dist/{step-3-0Deh5N9c.mjs → step-3-NBvYqr7R.mjs} +7 -7
  51. package/dist/{step-3-0Deh5N9c.mjs.map → step-3-NBvYqr7R.mjs.map} +1 -1
  52. package/dist/{tabs-D_vmoLBo.mjs → tabs-ROut24vi.mjs} +3 -3
  53. package/dist/{tabs-D_vmoLBo.mjs.map → tabs-ROut24vi.mjs.map} +1 -1
  54. package/dist/{topic-filter-DJMrhH-c.mjs → topic-filter-YL1wy3Q1.mjs} +2 -2
  55. package/dist/{topic-filter-DJMrhH-c.mjs.map → topic-filter-YL1wy3Q1.mjs.map} +1 -1
  56. package/package.json +3 -1
  57. package/dist/index--Q6orQkb.mjs.map +0 -1
  58. package/dist/index-C3KJXzZE.mjs.map +0 -1
  59. package/dist/index-C9pnotJK.mjs.map +0 -1
  60. package/dist/index-CJJXnqq1.mjs.map +0 -1
@@ -1,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--Q6orQkb.mjs";
2
- import { T as K, a as O, b as N, c as g } from "./tabs-D_vmoLBo.mjs";
1
+ import { v as F, w as T, x as _, y as E, b as x, z as H, G as V, d as W, j as e, L as R, I as $, N as p, J as v, K as w, P as z, M as f, 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-CYhwUFi2.mjs.map
113
+ //# sourceMappingURL=moderation-B0rtiaEH.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"moderation-CYhwUFi2.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&apos;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&apos;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&apos;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&apos;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--Q6orQkb.mjs";
2
- import { u as xe, D as he, A as ue, S as U } from "./deleted-feed-item-Bun4tY2_.mjs";
3
- import { H as me } from "./hash-CNgwAx-U.mjs";
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-COVa8CMw.mjs.map
249
+ //# sourceMappingURL=note-DjaU27En.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"note-COVa8CMw.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--Q6orQkb.mjs";
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-BHpKVBxx.mjs.map
15
+ //# sourceMappingURL=reply-4cqNFwLY.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"reply-BHpKVBxx.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]}
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]}
@@ -1,10 +1,10 @@
1
- import { ai as u, ax as E, ay as c, az as d, j as f, aA as S, aB as b, aC as P, s as O } from "./index--Q6orQkb.mjs";
2
- var R = Symbol.for("react.lazy"), y = E[" use ".trim().toString()];
3
- function j(r) {
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
4
  return typeof r == "object" && r !== null && "then" in r;
5
5
  }
6
6
  function N(r) {
7
- return r != null && typeof r == "object" && "$$typeof" in r && r.$$typeof === R && "_payload" in r && j(r._payload);
7
+ return r != null && typeof r == "object" && "$$typeof" in r && r.$$typeof === O && "_payload" in r && R(r._payload);
8
8
  }
9
9
  // @__NO_SIDE_EFFECTS__
10
10
  function _(r) {
@@ -13,8 +13,8 @@ function _(r) {
13
13
  N(i) && typeof y == "function" && (i = y(i._payload));
14
14
  const a = c.toArray(i), l = a.find(T);
15
15
  if (l) {
16
- const p = l.props.children, x = 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, x) : null });
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
18
  }
19
19
  return /* @__PURE__ */ f.jsx(o, { ...s, ref: t, children: i });
20
20
  });
@@ -26,7 +26,7 @@ function A(r) {
26
26
  let { children: t, ...i } = e;
27
27
  if (N(t) && typeof y == "function" && (t = y(t._payload)), d(t)) {
28
28
  const s = $(t), a = I(i, t.props);
29
- return t.type !== b && (a.ref = n ? P(n, s) : s), S(t, a);
29
+ return t.type !== x && (a.ref = n ? P(n, s) : s), S(t, a);
30
30
  }
31
31
  return c.count(t) > 1 ? c.only(null) : null;
32
32
  });
@@ -76,7 +76,7 @@ var w = [
76
76
  return typeof window < "u" && (window[Symbol.for("radix-ui")] = !0), /* @__PURE__ */ f.jsx(l, { ...a, ref: i });
77
77
  });
78
78
  return n.displayName = `Primitive.${o}`, { ...r, [o]: n };
79
- }, {}), L = "Separator", v = "horizontal", D = ["horizontal", "vertical"], g = u((r, o) => {
79
+ }, {}), D = "Separator", v = "horizontal", L = ["horizontal", "vertical"], g = u((r, o) => {
80
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
81
  return /* @__PURE__ */ f.jsx(
82
82
  z.div,
@@ -88,9 +88,9 @@ var w = [
88
88
  }
89
89
  );
90
90
  });
91
- g.displayName = L;
91
+ g.displayName = D;
92
92
  function W(r) {
93
- return D.includes(r);
93
+ return L.includes(r);
94
94
  }
95
95
  var h = g;
96
96
  const V = u(
@@ -98,7 +98,7 @@ const V = u(
98
98
  h,
99
99
  {
100
100
  ref: t,
101
- className: O(
101
+ className: j(
102
102
  "shrink-0 bg-border",
103
103
  o === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
104
104
  r
@@ -113,4 +113,4 @@ V.displayName = h.displayName;
113
113
  export {
114
114
  V as S
115
115
  };
116
- //# sourceMappingURL=separator-DP7q5sFH.mjs.map
116
+ //# sourceMappingURL=separator-Dgj8LPTF.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"separator-DP7q5sFH.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
+ {"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--Q6orQkb.mjs";
2
- import { E as D } from "./edit-profile-CYh00FZ7.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-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-3n7zo_3K.mjs.map
79
+ //# sourceMappingURL=settings-qNWc2HyW.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-3n7zo_3K.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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"}
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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"}