@tryghost/activitypub 3.1.0 → 3.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/activitypub.js +2 -2
  2. package/dist/{at-sign-l8HMU0fk.mjs → at-sign-B8iQvS42.mjs} +2 -2
  3. package/dist/{at-sign-l8HMU0fk.mjs.map → at-sign-B8iQvS42.mjs.map} +1 -1
  4. package/dist/{avatar-flipboard-D12yCmyH.mjs → avatar-flipboard-DNwig8eO.mjs} +2 -2
  5. package/dist/{avatar-flipboard-D12yCmyH.mjs.map → avatar-flipboard-DNwig8eO.mjs.map} +1 -1
  6. package/dist/{bluesky-sharing-D65sfQFX.mjs → bluesky-sharing-Cx4y2eb_.mjs} +6 -6
  7. package/dist/{bluesky-sharing-D65sfQFX.mjs.map → bluesky-sharing-Cx4y2eb_.mjs.map} +1 -1
  8. package/dist/{copy-DCHXVz-9.mjs → copy-Dg0Olymi.mjs} +2 -2
  9. package/dist/{copy-DCHXVz-9.mjs.map → copy-Dg0Olymi.mjs.map} +1 -1
  10. package/dist/{deleted-feed-item-BkXeOOSC.mjs → deleted-feed-item-C6ttBewp.mjs} +2 -2
  11. package/dist/{deleted-feed-item-BkXeOOSC.mjs.map → deleted-feed-item-C6ttBewp.mjs.map} +1 -1
  12. package/dist/{edit-profile-DdCJ6UkE.mjs → edit-profile-D17SCzby.mjs} +6 -6
  13. package/dist/edit-profile-D17SCzby.mjs.map +1 -0
  14. package/dist/{feed-D4gYSgoO.mjs → feed-OJkCDmvZ.mjs} +7 -7
  15. package/dist/{feed-D4gYSgoO.mjs.map → feed-OJkCDmvZ.mjs.map} +1 -1
  16. package/dist/{hash-D_Ql6FHR.mjs → hash-CaF6a8FN.mjs} +2 -2
  17. package/dist/{hash-D_Ql6FHR.mjs.map → hash-CaF6a8FN.mjs.map} +1 -1
  18. package/dist/{inbox-BIeU-G-G.mjs → inbox-DKED2HYQ.mjs} +2 -2
  19. package/dist/{inbox-BIeU-G-G.mjs.map → inbox-DKED2HYQ.mjs.map} +1 -1
  20. package/dist/{index-DK0316YP.mjs → index-B3WQF6P6.mjs} +2 -2
  21. package/dist/{index-DK0316YP.mjs.map → index-B3WQF6P6.mjs.map} +1 -1
  22. package/dist/{index-DiYjJ67s.mjs → index-BTDCxNUL.mjs} +11 -11
  23. package/dist/index-BTDCxNUL.mjs.map +1 -0
  24. package/dist/{index-BvOcRwis.mjs → index-CVvjItO-.mjs} +2 -2
  25. package/dist/{index-BvOcRwis.mjs.map → index-CVvjItO-.mjs.map} +1 -1
  26. package/dist/{index-l72TqahD.mjs → index-Cjktkl_Z.mjs} +9 -9
  27. package/dist/index-Cjktkl_Z.mjs.map +1 -0
  28. package/dist/{index-CPG1Xmp8.mjs → index-Cl_bAvCu.mjs} +6 -6
  29. package/dist/{index-CPG1Xmp8.mjs.map → index-Cl_bAvCu.mjs.map} +1 -1
  30. package/dist/{index-BurflorF.mjs → index-Cty-No3l.mjs} +11 -11
  31. package/dist/{index-BurflorF.mjs.map → index-Cty-No3l.mjs.map} +1 -1
  32. package/dist/{index-BlNT1f8K.mjs → index-DUNT0yV6.mjs} +3 -3
  33. package/dist/{index-BlNT1f8K.mjs.map → index-DUNT0yV6.mjs.map} +1 -1
  34. package/dist/{index-DIicyWvr.mjs → index-q4Ygdo0-.mjs} +52 -52
  35. package/dist/{index-DIicyWvr.mjs.map → index-q4Ygdo0-.mjs.map} +1 -1
  36. package/dist/{moderation-B0rtiaEH.mjs → moderation-nXSBmheF.mjs} +5 -5
  37. package/dist/{moderation-B0rtiaEH.mjs.map → moderation-nXSBmheF.mjs.map} +1 -1
  38. package/dist/{note-DjaU27En.mjs → note-uNSHIe4G.mjs} +4 -4
  39. package/dist/{note-DjaU27En.mjs.map → note-uNSHIe4G.mjs.map} +1 -1
  40. package/dist/{reply-4cqNFwLY.mjs → reply-BVkBkA2M.mjs} +2 -2
  41. package/dist/{reply-4cqNFwLY.mjs.map → reply-BVkBkA2M.mjs.map} +1 -1
  42. package/dist/{separator-Dgj8LPTF.mjs → separator-BljDgTc9.mjs} +2 -2
  43. package/dist/{separator-Dgj8LPTF.mjs.map → separator-BljDgTc9.mjs.map} +1 -1
  44. package/dist/{settings-qNWc2HyW.mjs → settings-CjuIDMTF.mjs} +3 -3
  45. package/dist/{settings-qNWc2HyW.mjs.map → settings-CjuIDMTF.mjs.map} +1 -1
  46. package/dist/{step-1-CuRWXSkm.mjs → step-1-YV90JpzH.mjs} +4 -4
  47. package/dist/{step-1-CuRWXSkm.mjs.map → step-1-YV90JpzH.mjs.map} +1 -1
  48. package/dist/{step-2-BsxjLzY8.mjs → step-2-BO7QOUb7.mjs} +6 -6
  49. package/dist/{step-2-BsxjLzY8.mjs.map → step-2-BO7QOUb7.mjs.map} +1 -1
  50. package/dist/{step-3-NBvYqr7R.mjs → step-3-qgcA50w6.mjs} +7 -7
  51. package/dist/{step-3-NBvYqr7R.mjs.map → step-3-qgcA50w6.mjs.map} +1 -1
  52. package/dist/{tabs-ROut24vi.mjs → tabs-DdupTuil.mjs} +15 -15
  53. package/dist/{tabs-ROut24vi.mjs.map → tabs-DdupTuil.mjs.map} +1 -1
  54. package/dist/{topic-filter-YL1wy3Q1.mjs → topic-filter-DqTL6EKu.mjs} +2 -2
  55. package/dist/{topic-filter-YL1wy3Q1.mjs.map → topic-filter-DqTL6EKu.mjs.map} +1 -1
  56. package/package.json +1 -1
  57. package/dist/edit-profile-DdCJ6UkE.mjs.map +0 -1
  58. package/dist/index-DiYjJ67s.mjs.map +0 -1
  59. package/dist/index-l72TqahD.mjs.map +0 -1
@@ -1,6 +1,6 @@
1
- import { a6 as E, j as t, aP as H, R as u, d as C, aQ as D, c as g, e as L, aw as O, ax as V, L as q, E as G, f as Q, aR as K, S as w, A as $, B as Z, aS as J, aa as P, h as b, r as X, ad as U, aT as Y, aU as ee, k as te, P as se } from "./index-DIicyWvr.mjs";
2
- import { A as ae } from "./at-sign-l8HMU0fk.mjs";
3
- import { R as ne } from "./reply-4cqNFwLY.mjs";
1
+ import { a6 as E, j as t, aP as H, R as u, d as C, aQ as D, c as g, e as L, aw as O, ax as V, L as q, E as G, f as Q, aR as K, S as w, A as $, B as Z, aS as J, aa as P, h as b, r as X, ad as U, aT as Y, aU as ee, k as te, P as se } from "./index-q4Ygdo0-.mjs";
2
+ import { A as ae } from "./at-sign-B8iQvS42.mjs";
3
+ import { R as ne } from "./reply-BVkBkA2M.mjs";
4
4
  /**
5
5
  * @license lucide-react v0.553.0 - ISC
6
6
  *
@@ -240,7 +240,7 @@ const fe = ({ group: a }) => {
240
240
  name: d.name,
241
241
  handle: d.handle
242
242
  },
243
- className: "-ml-2 !bg-[#F3F3F3] outline outline-2 outline-white group-hover:!bg-[#EDEEF0] group-hover:outline-gray-75 dark:outline-black group-hover:dark:outline-gray-950",
243
+ className: "bg-[#F3F3F3]! group-hover:bg-[#EDEEF0]! -ml-2 outline outline-2 outline-white group-hover:outline-gray-75 dark:outline-black group-hover:dark:outline-gray-950",
244
244
  size: "notification"
245
245
  },
246
246
  d.id
@@ -357,11 +357,11 @@ const fe = ({ group: a }) => {
357
357
  ] }, e.id || `${e.type}_${m}`);
358
358
  }) }),
359
359
  /* @__PURE__ */ t.jsx("div", { ref: v, className: "h-1" }),
360
- p && /* @__PURE__ */ t.jsx("div", { className: "-mt-4 mb-8 flex flex-col items-center justify-center space-y-4 text-center", children: /* @__PURE__ */ t.jsx(te, { size: "md" }) })
360
+ p && /* @__PURE__ */ t.jsx("div", { className: "-mt-4 mb-8 flex flex-col items-center justify-center gap-4 text-center", children: /* @__PURE__ */ t.jsx(te, { size: "md" }) })
361
361
  ] })
362
362
  ] }) });
363
363
  };
364
364
  export {
365
365
  Ne as default
366
366
  };
367
- //# sourceMappingURL=index-CPG1Xmp8.mjs.map
367
+ //# sourceMappingURL=index-Cl_bAvCu.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-CPG1Xmp8.mjs","sources":["../../../node_modules/lucide-react/dist/esm/icons/repeat-2.js","../../../node_modules/lucide-react/dist/esm/icons/user-round-check.js","../src/views/notifications/components/notification-icon.tsx","../src/views/notifications/components/notification-item.tsx","../src/components/global/separator.tsx","../src/views/notifications/notifications.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m2 9 3-3 3 3\", key: \"1ltn5i\" }],\n [\"path\", { d: \"M13 18H7a2 2 0 0 1-2-2V6\", key: \"1r6tfw\" }],\n [\"path\", { d: \"m22 15-3 3-3-3\", key: \"4rnwn2\" }],\n [\"path\", { d: \"M11 6h6a2 2 0 0 1 2 2v10\", key: \"2f72bc\" }]\n];\nconst Repeat2 = createLucideIcon(\"repeat-2\", __iconNode);\n\nexport { __iconNode, Repeat2 as default };\n//# sourceMappingURL=repeat-2.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M2 21a8 8 0 0 1 13.292-6\", key: \"bjp14o\" }],\n [\"circle\", { cx: \"10\", cy: \"8\", r: \"5\", key: \"o932ke\" }],\n [\"path\", { d: \"m16 19 2 2 4-4\", key: \"1b14m6\" }]\n];\nconst UserRoundCheck = createLucideIcon(\"user-round-check\", __iconNode);\n\nexport { __iconNode, UserRoundCheck as default };\n//# sourceMappingURL=user-round-check.js.map\n","import React from 'react';\nimport {LucideIcon} from '@tryghost/shade';\n\nexport type NotificationType = 'like' | 'follow' | 'reply' | 'repost' | 'mention';\nexport type NotificationIconSize = 'sm' | 'lg';\n\ninterface NotificationIconProps {\n notificationType: NotificationType;\n size?: NotificationIconSize;\n className?: string;\n}\n\nconst NotificationIcon: React.FC<NotificationIconProps> = ({notificationType, size = 'lg', className}) => {\n let icon;\n let badgeColor = '';\n const iconColor = 'white';\n const iconSize = size === 'sm' ? 13 : 20;\n const strokeWidth = size === 'sm' ? 2 : 1.5;\n\n switch (notificationType) {\n case 'follow':\n icon = <LucideIcon.UserRoundCheck className={`-mr-0.5 -mt-0.5 ${size === 'sm' && 'size-[11px]'}`} color={iconColor} size={iconSize} strokeWidth={strokeWidth} />;\n badgeColor = 'bg-blue-600';\n break;\n case 'like':\n icon = <LucideIcon.Heart className={`${size === 'sm' ? 'size-[11px]' : 'mt-px size-5'}`} color={iconColor} strokeWidth={strokeWidth} />;\n badgeColor = 'bg-pink-600';\n break;\n case 'reply':\n icon = <LucideIcon.Reply className='mb-px mr-px' color={iconColor} size={iconSize} strokeWidth={strokeWidth} />;\n badgeColor = 'bg-purple-600';\n break;\n case 'repost':\n icon = <LucideIcon.Repeat2 color={iconColor} size={iconSize} strokeWidth={strokeWidth} />;\n badgeColor = 'bg-green-500';\n break;\n case 'mention':\n icon = <LucideIcon.AtSign className={`${size === 'sm' ? 'size-[12px]' : 'size-5'}`} color={iconColor} size={iconSize} strokeWidth={strokeWidth} />;\n badgeColor = 'bg-orange-500';\n break;\n }\n\n return (\n <div className={`flex ${size === 'sm' ? 'size-5' : 'size-9'} items-center justify-center rounded-full ${badgeColor} ${className && className}`}>\n {icon}\n </div>\n );\n};\n\nexport default NotificationIcon;\n","import NotificationIcon, {NotificationIconSize, NotificationType} from './notification-icon';\nimport React from 'react';\n\n// Context to share common props between compound components\ninterface NotificationContextType {\n onClick?: () => void;\n url?: string;\n}\n\nconst NotificationContext = React.createContext<NotificationContextType | undefined>(undefined);\n\n// Root component\ninterface NotificationItemProps {\n isGrouped?: boolean;\n centerAlign?: boolean;\n children: React.ReactNode;\n onClick?: () => void;\n url?: string;\n className?: string;\n}\n\nconst NotificationItem = ({isGrouped, centerAlign, children, onClick, url, className}: NotificationItemProps) => {\n return (\n <NotificationContext.Provider value={{onClick, url}}>\n <div className={`group relative -mx-4 -my-px ${isGrouped ? 'grid' : 'flex'} ${centerAlign ? 'items-center' : 'items-start'} cursor-pointer grid-cols-[auto_1fr] gap-x-4 gap-y-2.5 rounded-lg px-4 py-5 text-left break-anywhere hover:bg-gray-75 ${className}`}\n role='button'\n onClick={onClick}\n >\n {children}\n </div>\n </NotificationContext.Provider>\n );\n};\n\n// Sub-components\nconst Icon = ({size = 'lg', type}: {size?: NotificationIconSize; type: NotificationType}) => {\n return (\n <div className='col-start-1 row-start-1'>\n <NotificationIcon notificationType={type} size={size} />\n </div>\n );\n};\n\nconst Avatars = ({children}: {children: React.ReactNode}) => {\n return (\n <div className='col-start-2 row-start-1 flex gap-2'>\n {children}\n </div>\n );\n};\n\nconst Content = ({children}: {children: React.ReactNode}) => {\n return (\n <div className='col-start-2 row-start-2 -mt-0.5 grow overflow-hidden'>\n {children}\n </div>\n );\n};\n\n// Attach sub-components to the main component\nNotificationItem.Icon = Icon;\nNotificationItem.Avatars = Avatars;\nNotificationItem.Content = Content;\n\nexport default NotificationItem;\n","import React from 'react';\n\nconst Separator: React.FC = () => {\n return <div className='h-px w-full bg-gray-150 dark:bg-gray-950' />;\n};\n\nexport default Separator;","import React, {useEffect, useRef} from 'react';\nimport {ActorProperties} from '@tryghost/admin-x-framework/api/activitypub';\nimport {Button, LoadingIndicator, LucideIcon, Skeleton} from '@tryghost/shade';\n\nimport APAvatar from '@components/global/ap-avatar';\nimport AppError from '@components/layout/error';\nimport FeedItemStats from '@components/feed/feed-item-stats';\nimport FollowButton from '@components/global/follow-button';\nimport Layout from '@components/layout';\nimport NotificationIcon from './components/notification-icon';\nimport NotificationItem from './components/notification-item';\nimport ProfilePreviewHoverCard from '@components/global/profile-preview-hover-card';\nimport Separator from '@components/global/separator';\nimport {EmptyViewIcon, EmptyViewIndicator} from '@src/components/global/empty-view-indicator';\nimport {Notification, isApiError} from '@src/api/activitypub';\nimport {handleProfileClick} from '@utils/handle-profile-click';\nimport {renderFeedAttachment} from '@components/feed/feed-item';\nimport {renderTimestamp} from '@src/utils/render-timestamp';\nimport {stripHtml} from '@src/utils/content-formatters';\nimport {useNavigateWithBasePath} from '@src/hooks/use-navigate-with-base-path';\nimport {useNotificationsForUser} from '@hooks/use-activity-pub-queries';\n\ninterface NotificationGroup {\n id: string;\n type: Notification['type'];\n actors: Notification['actor'][];\n post: Notification['post'];\n inReplyTo: Notification['inReplyTo'];\n createdAt: string;\n}\n\ninterface NotificationGroupDescriptionProps {\n group: NotificationGroup;\n}\n\n/**\n * Calculate a time bucket for grouping notifications\n * Groups notifications into time windows\n */\nfunction getTimeBucket(timestamp: string): string {\n const TIME_WINDOW_MS = 24 * 60 * 60 * 1000; // 24 hours\n const date = new Date(timestamp);\n const timeMs = date.getTime();\n const bucketStart = Math.floor(timeMs / TIME_WINDOW_MS) * TIME_WINDOW_MS;\n return bucketStart.toString();\n}\n\nfunction groupNotifications(notifications: Notification[]): NotificationGroup[] {\n const groups: {\n [key: string]: NotificationGroup\n } = {};\n\n let lastType: string | null = null;\n let sequenceCounter = 0;\n\n notifications.forEach((notification) => {\n // Increment sequence counter when we encounter a different type\n // This preserves chronological order by preventing grouping across type boundaries\n if (notification.type !== lastType) {\n sequenceCounter += 1;\n lastType = notification.type;\n }\n\n let groupKey = '';\n const timeBucket = `_${getTimeBucket(notification.createdAt)}`;\n const sequence = `_seq${sequenceCounter}`;\n\n switch (notification.type) {\n case 'like':\n if (notification.post?.id) {\n groupKey = `like_${notification.post.id}${timeBucket}${sequence}`;\n }\n break;\n case 'reply':\n // Don't group replies\n groupKey = `reply_${notification.id}`;\n break;\n case 'repost':\n if (notification.post?.id) {\n groupKey = `repost_${notification.post.id}${timeBucket}${sequence}`;\n }\n break;\n case 'follow':\n groupKey = `follow_${timeBucket}${sequence}`;\n break;\n case 'mention':\n // Don't group mentions\n groupKey = `mention_${notification.id}`;\n break;\n }\n\n if (!groups[groupKey]) {\n groups[groupKey] = {\n id: notification.id,\n type: notification.type,\n actors: [],\n post: notification.post,\n inReplyTo: notification.inReplyTo,\n createdAt: notification.createdAt\n };\n }\n\n // Add actor if not already in the group\n if (!groups[groupKey].actors.find(a => a.id === notification.actor.id)) {\n groups[groupKey].actors.push(notification.actor);\n }\n });\n\n return Object.values(groups);\n};\n\nconst NotificationGroupDescription: React.FC<NotificationGroupDescriptionProps> = ({group}) => {\n const [firstActor, ...otherActors] = group.actors;\n const hasOthers = otherActors.length > 0;\n\n const actorClass = 'cursor-pointer font-semibold hover:underline text-black dark:text-white';\n\n const navigate = useNavigateWithBasePath();\n\n const actorText = (\n <>\n <ProfilePreviewHoverCard actor={firstActor as unknown as ActorProperties} align=\"center\" isCurrentUser={false}>\n <span\n className={actorClass}\n onClick={(e) => {\n e?.stopPropagation();\n handleProfileClick(firstActor.handle, navigate);\n }}\n >\n {firstActor.name}\n </span>\n </ProfilePreviewHoverCard>\n {hasOthers && ` and ${otherActors.length} ${otherActors.length > 1 ? 'others' : 'other'}`}\n </>\n );\n\n switch (group.type) {\n case 'follow':\n return <>{actorText} followed you</>;\n case 'like':\n return <>{actorText} liked your {group.post?.type === 'article' ? 'post' : 'note'}</>;\n case 'repost':\n return <>{actorText} reposted your {group.post?.type === 'article' ? 'post' : 'note'}</>;\n case 'reply':\n if (group.inReplyTo && typeof group.inReplyTo !== 'string') {\n return actorText;\n }\n break;\n case 'mention':\n return actorText;\n }\n\n return <></>;\n};\n\nconst ProfileLinkedContent: React.FC<{\n content: string;\n className?: string;\n stripTags?: string[];\n}> = ({content, className, stripTags = []}) => {\n const contentRef = useRef<HTMLDivElement>(null);\n const navigate = useNavigateWithBasePath();\n\n useEffect(() => {\n const element = contentRef.current;\n if (!element) {\n return;\n }\n\n const handleProfileLinkClick = (e: Event) => {\n const target = (e as MouseEvent).target as HTMLElement;\n const link = target.closest('a[data-profile]');\n\n if (link) {\n const handle = link.getAttribute('data-profile')?.trim();\n const isValidHandle = /^@([\\w.-]+)@([\\w-]+\\.[\\w.-]+[a-zA-Z])$/.test(handle || '');\n\n if (isValidHandle && handle) {\n e.preventDefault();\n e.stopPropagation();\n handleProfileClick(handle, navigate);\n }\n }\n };\n\n element.addEventListener('click', handleProfileLinkClick);\n return () => {\n element.removeEventListener('click', handleProfileLinkClick);\n };\n }, [navigate, content]);\n\n return (\n <div\n dangerouslySetInnerHTML={{__html: stripHtml(content || '', stripTags)}}\n ref={contentRef}\n className={className}\n />\n );\n};\n\nconst Notifications: React.FC = () => {\n const [openStates, setOpenStates] = React.useState<{[key: string]: boolean}>({});\n const navigate = useNavigateWithBasePath();\n\n const toggleOpen = (groupId: string) => {\n setOpenStates(prev => ({\n ...prev,\n [groupId]: !prev[groupId]\n }));\n };\n\n const handleLikeClick = () => {\n // Do API req or smth\n // Don't need to know about setting timeouts or anything like that\n };\n\n const maxAvatars = 5;\n\n const {data, error, fetchNextPage, hasNextPage, isFetchingNextPage, isLoading} = useNotificationsForUser('index');\n\n const notificationGroups = (\n data?.pages.flatMap((page) => {\n return groupNotifications(page.notifications);\n })\n // If no notifications, return 10 empty groups for the loading state\n ?? Array(10).fill({actors: [{}]}));\n\n const observerRef = useRef<IntersectionObserver | null>(null);\n const loadMoreRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n\n observerRef.current = new IntersectionObserver((entries) => {\n if (entries[0].isIntersecting && hasNextPage && !isFetchingNextPage) {\n fetchNextPage();\n }\n });\n\n if (loadMoreRef.current) {\n observerRef.current.observe(loadMoreRef.current);\n }\n\n return () => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n };\n }, [hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n const handleNotificationClick = (group: NotificationGroup, index: number) => {\n switch (group.type) {\n case 'like':\n if (group.post) {\n navigate(`/${group.post.type === 'article' ? 'reader' : 'notes'}/${encodeURIComponent(group.post.id)}`);\n }\n break;\n case 'reply':\n if (group.post && group.inReplyTo) {\n navigate(`/notes/${encodeURIComponent(group.post.id)}`);\n }\n break;\n case 'repost':\n if (group.post) {\n navigate(`/${group.post.type === 'article' ? 'reader' : 'notes'}/${encodeURIComponent(group.post.id)}`);\n }\n break;\n case 'follow':\n if (group.actors.length > 1) {\n toggleOpen(group.id || `${group.type}_${index}`);\n } else {\n handleProfileClick(group.actors[0].handle, navigate);\n }\n break;\n case 'mention':\n if (group.post) {\n navigate(`/notes/${encodeURIComponent(group.post.id)}`);\n }\n break;\n }\n };\n\n if (error && isApiError(error)) {\n return <AppError errorCode={error.code} statusCode={error.statusCode}/>;\n }\n\n return (\n <Layout>\n <div className='z-0 flex w-full flex-col items-center'>\n {\n isLoading === false && notificationGroups.length === 0 && (\n <EmptyViewIndicator>\n <EmptyViewIcon><LucideIcon.Bell /></EmptyViewIcon>\n Quiet for now, but not for long! When someone likes, boosts, or replies to you, you&apos;ll find it here.\n </EmptyViewIndicator>\n )\n }\n {\n (notificationGroups.length > 0) && (\n <>\n <div className='my-8 flex w-full max-w-[620px] flex-col max-md:mt-5'>\n {notificationGroups.map((group, index) => (\n <React.Fragment key={group.id || `${group.type}_${index}`}>\n <NotificationItem\n centerAlign={group.actors.length < 2 && group.type === 'follow'}\n className='hover:bg-gray-75 dark:hover:bg-gray-950'\n isGrouped={group.actors.length > 1}\n onClick={() => handleNotificationClick(group, index)}\n >\n {isLoading ?\n <Skeleton className='rounded-full' containerClassName='flex h-10 w-10' /> :\n (group.actors.length > 1 ?\n <NotificationItem.Icon type={group.type} /> :\n <div className='relative'>\n <APAvatar\n key={group.actors[0].id}\n author={{\n icon: {\n url: group.actors[0].avatarUrl || ''\n },\n name: group.actors[0].name,\n handle: group.actors[0].handle\n }}\n size='notification'\n />\n <NotificationIcon className='absolute -bottom-1 -right-1 z-10 border-2 border-white dark:border-black' notificationType={group.type} size='sm' />\n </div>\n )\n }\n {group.actors.length > 1 && <NotificationItem.Avatars>\n <div className='flex w-full flex-col'>\n <div className='relative flex items-center pl-2'>\n {!openStates[group.id || `${group.type}_${index}`] && group.actors.slice(0, maxAvatars).map((actor: ActorProperties) => (\n <APAvatar\n key={actor.id}\n author={{\n icon: {\n url: actor.avatarUrl || ''\n },\n name: actor.name,\n handle: actor.handle\n }}\n className='-ml-2 !bg-[#F3F3F3] outline outline-2 outline-white group-hover:!bg-[#EDEEF0] group-hover:outline-gray-75 dark:outline-black group-hover:dark:outline-gray-950'\n size='notification'\n />\n ))}\n {group.actors.length > maxAvatars && (!openStates[group.id || `${group.type}_${index}`]) && (\n <div className='absolute right-[28px] z-10 flex size-9 items-center justify-center rounded-full bg-black/50 text-base font-semibold tracking-tightest text-white'>\n {`+${group.actors.length - maxAvatars}`}\n </div>\n )}\n\n {group.actors.length > 1 && (\n <Button className={`group flex items-center gap-0.5 text-gray-700 hover:bg-transparent hover:text-black dark:text-gray-600 dark:hover:text-white ${openStates[group.id || `${group.type}_${index}`] ? 'ml-[-20px]' : 'ml-0 w-[28px]'}`} variant='ghost' onClick={(event?: React.MouseEvent<HTMLElement>) => {\n event?.stopPropagation();\n toggleOpen(group.id || `${group.type}_${index}`);\n }}>\n <LucideIcon.ChevronDown className={`${openStates[group.id || `${group.type}_${index}`] ? 'rotate-180' : ''}`} size={20} strokeWidth={1.5} />\n {openStates[group.id || `${group.type}_${index}`] ? 'Hide' : <span className='sr-only'>Show all</span>}\n </Button>\n )}\n </div>\n <div className={`overflow-hidden transition-all duration-300 ease-in-out ${openStates[group.id || `${group.type}_${index}`] ? 'mb-2 max-h-[1384px] opacity-100' : 'max-h-0 opacity-0'}`}>\n {openStates[group.id || `${group.type}_${index}`] && group.actors.length > 1 && (\n <div className='flex flex-col gap-2 pt-2'>\n {group.actors.map((actor: ActorProperties) => (\n <div\n key={actor.id}\n className='group/item flex items-center justify-between gap-4 break-anywhere'\n onClick={(e) => {\n e?.stopPropagation();\n handleProfileClick(actor.handle, navigate);\n }}\n >\n <div className='flex min-w-0 items-center'>\n <APAvatar author={{\n icon: {\n url: actor.avatarUrl || ''\n },\n name: actor.name,\n handle: actor.handle\n }} size='xs' />\n <span className='ml-2 line-clamp-1 text-base font-semibold group-hover/item:underline dark:text-white'>{actor.name}</span>\n <span className='ml-1 line-clamp-1 text-base text-gray-700 dark:text-gray-600'>{actor.handle}</span>\n </div>\n {group.type === 'follow' && !actor.followedByMe && (\n <FollowButton\n following={false}\n handle={actor.handle}\n variant=\"link\"\n />\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n </NotificationItem.Avatars>}\n <NotificationItem.Content>\n <div>\n {isLoading ?\n <>\n <Skeleton />\n <Skeleton className='w-full max-w-60' />\n </> :\n <div className='flex justify-between'>\n <div className='flex items-center gap-1'>\n <span className='truncate'><NotificationGroupDescription group={group} /></span>\n {group.actors.length < 2 &&\n <>\n <span className='mt-px text-[8px] text-gray-700 dark:text-gray-600'>&bull;</span>\n <span className='mt-0.5 text-sm text-gray-700 dark:text-gray-600'>{renderTimestamp(group, false)}</span>\n </>\n }\n </div>\n {/* Follow button for singular follow, reply, and mention */}\n {group.actors.length === 1 && (group.type === 'follow' || group.type === 'reply' || group.type === 'mention') && !group.actors[0].followedByMe && (\n <FollowButton\n following={false}\n handle={group.actors[0].handle}\n variant=\"link\"\n />\n )}\n </div>\n }\n </div>\n {(\n ((group.type === 'reply' && group.inReplyTo) || group.type === 'mention') ||\n (group.type === 'like' && !group.post?.name && group.post?.content) ||\n (group.type === 'repost' && !group.post?.name && group.post?.content)\n ) && (\n (group.type !== 'reply' && group.type !== 'mention' ?\n <div className='ap-note-content mt-0.5 line-clamp-1 text-pretty text-sm text-gray-700 dark:text-gray-600'>\n {group.post?.type === 'article' && group.post?.title && <>{group.post.title} &mdash; </>}\n <span dangerouslySetInnerHTML={{__html: stripHtml(group.post?.content || '')}} />\n </div> :\n <>\n <div className='mt-2.5 rounded-md bg-gray-100 px-5 py-[14px] group-hover:bg-gray-200 dark:bg-gray-925/30 group-hover:dark:bg-black/40'>\n <ProfileLinkedContent\n className='ap-note-content text-pretty'\n content={group.post?.content || ''}\n stripTags={['a']}\n />\n {group.post && group.post.attachments && group.post.attachments.length > 0 && (\n <div className='notification-attachments mb-1 [&_.attachment-gallery]:flex [&_.attachment-gallery]:flex-wrap [&_img]:aspect-square [&_img]:max-w-[calc(20%-6.4px)]'>\n {renderFeedAttachment(\n {...group.post, type: 'Note', attachment: group.post.attachments}\n )}\n </div>\n )}\n </div>\n </>\n )\n )}\n {((group.type === 'reply' && group.post) || group.type === 'mention') && (\n <div className=\"mt-1.5\">\n <FeedItemStats\n actor={{\n ...group.actors[0],\n icon: {\n url: group.actors[0].avatarUrl || ''\n },\n id: group.actors[0].url,\n preferredUsername: group.actors[0].handle?.replace(/^@([^@]+)@.*$/, '$1') || 'unknown'\n }}\n buttonClassName='hover:bg-gray-200'\n commentCount={group.post.replyCount || 0}\n layout=\"notification\"\n likeCount={group.post.likeCount || 0}\n object={{\n ...group.post,\n liked: group.post.likedByMe,\n reposted: group.post.repostedByMe\n }}\n repostCount={group.post.repostCount || 0}\n onLikeClick={handleLikeClick}\n />\n </div>\n )}\n </NotificationItem.Content>\n </NotificationItem>\n {index < notificationGroups.length - 1 &&\n <div className='pl-[52px]'><Separator /></div>\n }\n </React.Fragment>\n ))}\n </div>\n <div ref={loadMoreRef} className='h-1'></div>\n {isFetchingNextPage && (\n <div className='-mt-4 mb-8 flex flex-col items-center justify-center space-y-4 text-center'>\n <LoadingIndicator size='md' />\n </div>\n )}\n </>\n )\n }\n </div>\n </Layout>\n );\n};\n\nexport default Notifications;\n"],"names":["__iconNode","Repeat2","createLucideIcon","UserRoundCheck","NotificationIcon","notificationType","size","className","icon","badgeColor","iconColor","iconSize","strokeWidth","jsx","LucideIcon.UserRoundCheck","LucideIcon.Heart","LucideIcon.Reply","LucideIcon.Repeat2","LucideIcon.AtSign","NotificationContext","React","NotificationItem","isGrouped","centerAlign","children","onClick","url","Icon","type","Avatars","Content","Separator","getTimeBucket","timestamp","timeMs","groupNotifications","notifications","groups","lastType","sequenceCounter","notification","groupKey","timeBucket","sequence","_a","_b","a","NotificationGroupDescription","group","firstActor","otherActors","hasOthers","actorClass","navigate","useNavigateWithBasePath","actorText","jsxs","Fragment","ProfilePreviewHoverCard","e","handleProfileClick","ProfileLinkedContent","content","stripTags","contentRef","useRef","useEffect","element","handleProfileLinkClick","link","handle","stripHtml","Notifications","openStates","setOpenStates","toggleOpen","groupId","prev","handleLikeClick","maxAvatars","data","error","fetchNextPage","hasNextPage","isFetchingNextPage","isLoading","useNotificationsForUser","notificationGroups","page","observerRef","loadMoreRef","entries","handleNotificationClick","index","isApiError","AppError","Layout","EmptyViewIndicator","EmptyViewIcon","LucideIcon.Bell","Skeleton","APAvatar","actor","Button","event","LucideIcon.ChevronDown","FollowButton","renderTimestamp","_c","_d","_e","_f","_g","_h","renderFeedAttachment","FeedItemStats","_i","LoadingIndicator"],"mappings":"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","x_google_ignoreList":[0,1]}
1
+ {"version":3,"file":"index-Cl_bAvCu.mjs","sources":["../../../node_modules/lucide-react/dist/esm/icons/repeat-2.js","../../../node_modules/lucide-react/dist/esm/icons/user-round-check.js","../src/views/notifications/components/notification-icon.tsx","../src/views/notifications/components/notification-item.tsx","../src/components/global/separator.tsx","../src/views/notifications/notifications.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m2 9 3-3 3 3\", key: \"1ltn5i\" }],\n [\"path\", { d: \"M13 18H7a2 2 0 0 1-2-2V6\", key: \"1r6tfw\" }],\n [\"path\", { d: \"m22 15-3 3-3-3\", key: \"4rnwn2\" }],\n [\"path\", { d: \"M11 6h6a2 2 0 0 1 2 2v10\", key: \"2f72bc\" }]\n];\nconst Repeat2 = createLucideIcon(\"repeat-2\", __iconNode);\n\nexport { __iconNode, Repeat2 as default };\n//# sourceMappingURL=repeat-2.js.map\n","/**\n * @license lucide-react v0.553.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M2 21a8 8 0 0 1 13.292-6\", key: \"bjp14o\" }],\n [\"circle\", { cx: \"10\", cy: \"8\", r: \"5\", key: \"o932ke\" }],\n [\"path\", { d: \"m16 19 2 2 4-4\", key: \"1b14m6\" }]\n];\nconst UserRoundCheck = createLucideIcon(\"user-round-check\", __iconNode);\n\nexport { __iconNode, UserRoundCheck as default };\n//# sourceMappingURL=user-round-check.js.map\n","import React from 'react';\nimport {LucideIcon} from '@tryghost/shade';\n\nexport type NotificationType = 'like' | 'follow' | 'reply' | 'repost' | 'mention';\nexport type NotificationIconSize = 'sm' | 'lg';\n\ninterface NotificationIconProps {\n notificationType: NotificationType;\n size?: NotificationIconSize;\n className?: string;\n}\n\nconst NotificationIcon: React.FC<NotificationIconProps> = ({notificationType, size = 'lg', className}) => {\n let icon;\n let badgeColor = '';\n const iconColor = 'white';\n const iconSize = size === 'sm' ? 13 : 20;\n const strokeWidth = size === 'sm' ? 2 : 1.5;\n\n switch (notificationType) {\n case 'follow':\n icon = <LucideIcon.UserRoundCheck className={`-mr-0.5 -mt-0.5 ${size === 'sm' && 'size-[11px]'}`} color={iconColor} size={iconSize} strokeWidth={strokeWidth} />;\n badgeColor = 'bg-blue-600';\n break;\n case 'like':\n icon = <LucideIcon.Heart className={`${size === 'sm' ? 'size-[11px]' : 'mt-px size-5'}`} color={iconColor} strokeWidth={strokeWidth} />;\n badgeColor = 'bg-pink-600';\n break;\n case 'reply':\n icon = <LucideIcon.Reply className='mb-px mr-px' color={iconColor} size={iconSize} strokeWidth={strokeWidth} />;\n badgeColor = 'bg-purple-600';\n break;\n case 'repost':\n icon = <LucideIcon.Repeat2 color={iconColor} size={iconSize} strokeWidth={strokeWidth} />;\n badgeColor = 'bg-green-500';\n break;\n case 'mention':\n icon = <LucideIcon.AtSign className={`${size === 'sm' ? 'size-[12px]' : 'size-5'}`} color={iconColor} size={iconSize} strokeWidth={strokeWidth} />;\n badgeColor = 'bg-orange-500';\n break;\n }\n\n return (\n <div className={`flex ${size === 'sm' ? 'size-5' : 'size-9'} items-center justify-center rounded-full ${badgeColor} ${className && className}`}>\n {icon}\n </div>\n );\n};\n\nexport default NotificationIcon;\n","import NotificationIcon, {NotificationIconSize, NotificationType} from './notification-icon';\nimport React from 'react';\n\n// Context to share common props between compound components\ninterface NotificationContextType {\n onClick?: () => void;\n url?: string;\n}\n\nconst NotificationContext = React.createContext<NotificationContextType | undefined>(undefined);\n\n// Root component\ninterface NotificationItemProps {\n isGrouped?: boolean;\n centerAlign?: boolean;\n children: React.ReactNode;\n onClick?: () => void;\n url?: string;\n className?: string;\n}\n\nconst NotificationItem = ({isGrouped, centerAlign, children, onClick, url, className}: NotificationItemProps) => {\n return (\n <NotificationContext.Provider value={{onClick, url}}>\n <div className={`group relative -mx-4 -my-px ${isGrouped ? 'grid' : 'flex'} ${centerAlign ? 'items-center' : 'items-start'} cursor-pointer grid-cols-[auto_1fr] gap-x-4 gap-y-2.5 rounded-lg px-4 py-5 text-left break-anywhere hover:bg-gray-75 ${className}`}\n role='button'\n onClick={onClick}\n >\n {children}\n </div>\n </NotificationContext.Provider>\n );\n};\n\n// Sub-components\nconst Icon = ({size = 'lg', type}: {size?: NotificationIconSize; type: NotificationType}) => {\n return (\n <div className='col-start-1 row-start-1'>\n <NotificationIcon notificationType={type} size={size} />\n </div>\n );\n};\n\nconst Avatars = ({children}: {children: React.ReactNode}) => {\n return (\n <div className='col-start-2 row-start-1 flex gap-2'>\n {children}\n </div>\n );\n};\n\nconst Content = ({children}: {children: React.ReactNode}) => {\n return (\n <div className='col-start-2 row-start-2 -mt-0.5 grow overflow-hidden'>\n {children}\n </div>\n );\n};\n\n// Attach sub-components to the main component\nNotificationItem.Icon = Icon;\nNotificationItem.Avatars = Avatars;\nNotificationItem.Content = Content;\n\nexport default NotificationItem;\n","import React from 'react';\n\nconst Separator: React.FC = () => {\n return <div className='h-px w-full bg-gray-150 dark:bg-gray-950' />;\n};\n\nexport default Separator;","import React, {useEffect, useRef} from 'react';\nimport {ActorProperties} from '@tryghost/admin-x-framework/api/activitypub';\nimport {Button, LoadingIndicator, LucideIcon, Skeleton} from '@tryghost/shade';\n\nimport APAvatar from '@components/global/ap-avatar';\nimport AppError from '@components/layout/error';\nimport FeedItemStats from '@components/feed/feed-item-stats';\nimport FollowButton from '@components/global/follow-button';\nimport Layout from '@components/layout';\nimport NotificationIcon from './components/notification-icon';\nimport NotificationItem from './components/notification-item';\nimport ProfilePreviewHoverCard from '@components/global/profile-preview-hover-card';\nimport Separator from '@components/global/separator';\nimport {EmptyViewIcon, EmptyViewIndicator} from '@src/components/global/empty-view-indicator';\nimport {Notification, isApiError} from '@src/api/activitypub';\nimport {handleProfileClick} from '@utils/handle-profile-click';\nimport {renderFeedAttachment} from '@components/feed/feed-item';\nimport {renderTimestamp} from '@src/utils/render-timestamp';\nimport {stripHtml} from '@src/utils/content-formatters';\nimport {useNavigateWithBasePath} from '@src/hooks/use-navigate-with-base-path';\nimport {useNotificationsForUser} from '@hooks/use-activity-pub-queries';\n\ninterface NotificationGroup {\n id: string;\n type: Notification['type'];\n actors: Notification['actor'][];\n post: Notification['post'];\n inReplyTo: Notification['inReplyTo'];\n createdAt: string;\n}\n\ninterface NotificationGroupDescriptionProps {\n group: NotificationGroup;\n}\n\n/**\n * Calculate a time bucket for grouping notifications\n * Groups notifications into time windows\n */\nfunction getTimeBucket(timestamp: string): string {\n const TIME_WINDOW_MS = 24 * 60 * 60 * 1000; // 24 hours\n const date = new Date(timestamp);\n const timeMs = date.getTime();\n const bucketStart = Math.floor(timeMs / TIME_WINDOW_MS) * TIME_WINDOW_MS;\n return bucketStart.toString();\n}\n\nfunction groupNotifications(notifications: Notification[]): NotificationGroup[] {\n const groups: {\n [key: string]: NotificationGroup\n } = {};\n\n let lastType: string | null = null;\n let sequenceCounter = 0;\n\n notifications.forEach((notification) => {\n // Increment sequence counter when we encounter a different type\n // This preserves chronological order by preventing grouping across type boundaries\n if (notification.type !== lastType) {\n sequenceCounter += 1;\n lastType = notification.type;\n }\n\n let groupKey = '';\n const timeBucket = `_${getTimeBucket(notification.createdAt)}`;\n const sequence = `_seq${sequenceCounter}`;\n\n switch (notification.type) {\n case 'like':\n if (notification.post?.id) {\n groupKey = `like_${notification.post.id}${timeBucket}${sequence}`;\n }\n break;\n case 'reply':\n // Don't group replies\n groupKey = `reply_${notification.id}`;\n break;\n case 'repost':\n if (notification.post?.id) {\n groupKey = `repost_${notification.post.id}${timeBucket}${sequence}`;\n }\n break;\n case 'follow':\n groupKey = `follow_${timeBucket}${sequence}`;\n break;\n case 'mention':\n // Don't group mentions\n groupKey = `mention_${notification.id}`;\n break;\n }\n\n if (!groups[groupKey]) {\n groups[groupKey] = {\n id: notification.id,\n type: notification.type,\n actors: [],\n post: notification.post,\n inReplyTo: notification.inReplyTo,\n createdAt: notification.createdAt\n };\n }\n\n // Add actor if not already in the group\n if (!groups[groupKey].actors.find(a => a.id === notification.actor.id)) {\n groups[groupKey].actors.push(notification.actor);\n }\n });\n\n return Object.values(groups);\n};\n\nconst NotificationGroupDescription: React.FC<NotificationGroupDescriptionProps> = ({group}) => {\n const [firstActor, ...otherActors] = group.actors;\n const hasOthers = otherActors.length > 0;\n\n const actorClass = 'cursor-pointer font-semibold hover:underline text-black dark:text-white';\n\n const navigate = useNavigateWithBasePath();\n\n const actorText = (\n <>\n <ProfilePreviewHoverCard actor={firstActor as unknown as ActorProperties} align=\"center\" isCurrentUser={false}>\n <span\n className={actorClass}\n onClick={(e) => {\n e?.stopPropagation();\n handleProfileClick(firstActor.handle, navigate);\n }}\n >\n {firstActor.name}\n </span>\n </ProfilePreviewHoverCard>\n {hasOthers && ` and ${otherActors.length} ${otherActors.length > 1 ? 'others' : 'other'}`}\n </>\n );\n\n switch (group.type) {\n case 'follow':\n return <>{actorText} followed you</>;\n case 'like':\n return <>{actorText} liked your {group.post?.type === 'article' ? 'post' : 'note'}</>;\n case 'repost':\n return <>{actorText} reposted your {group.post?.type === 'article' ? 'post' : 'note'}</>;\n case 'reply':\n if (group.inReplyTo && typeof group.inReplyTo !== 'string') {\n return actorText;\n }\n break;\n case 'mention':\n return actorText;\n }\n\n return <></>;\n};\n\nconst ProfileLinkedContent: React.FC<{\n content: string;\n className?: string;\n stripTags?: string[];\n}> = ({content, className, stripTags = []}) => {\n const contentRef = useRef<HTMLDivElement>(null);\n const navigate = useNavigateWithBasePath();\n\n useEffect(() => {\n const element = contentRef.current;\n if (!element) {\n return;\n }\n\n const handleProfileLinkClick = (e: Event) => {\n const target = (e as MouseEvent).target as HTMLElement;\n const link = target.closest('a[data-profile]');\n\n if (link) {\n const handle = link.getAttribute('data-profile')?.trim();\n const isValidHandle = /^@([\\w.-]+)@([\\w-]+\\.[\\w.-]+[a-zA-Z])$/.test(handle || '');\n\n if (isValidHandle && handle) {\n e.preventDefault();\n e.stopPropagation();\n handleProfileClick(handle, navigate);\n }\n }\n };\n\n element.addEventListener('click', handleProfileLinkClick);\n return () => {\n element.removeEventListener('click', handleProfileLinkClick);\n };\n }, [navigate, content]);\n\n return (\n <div\n dangerouslySetInnerHTML={{__html: stripHtml(content || '', stripTags)}}\n ref={contentRef}\n className={className}\n />\n );\n};\n\nconst Notifications: React.FC = () => {\n const [openStates, setOpenStates] = React.useState<{[key: string]: boolean}>({});\n const navigate = useNavigateWithBasePath();\n\n const toggleOpen = (groupId: string) => {\n setOpenStates(prev => ({\n ...prev,\n [groupId]: !prev[groupId]\n }));\n };\n\n const handleLikeClick = () => {\n // Do API req or smth\n // Don't need to know about setting timeouts or anything like that\n };\n\n const maxAvatars = 5;\n\n const {data, error, fetchNextPage, hasNextPage, isFetchingNextPage, isLoading} = useNotificationsForUser('index');\n\n const notificationGroups = (\n data?.pages.flatMap((page) => {\n return groupNotifications(page.notifications);\n })\n // If no notifications, return 10 empty groups for the loading state\n ?? Array(10).fill({actors: [{}]}));\n\n const observerRef = useRef<IntersectionObserver | null>(null);\n const loadMoreRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n\n observerRef.current = new IntersectionObserver((entries) => {\n if (entries[0].isIntersecting && hasNextPage && !isFetchingNextPage) {\n fetchNextPage();\n }\n });\n\n if (loadMoreRef.current) {\n observerRef.current.observe(loadMoreRef.current);\n }\n\n return () => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n };\n }, [hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n const handleNotificationClick = (group: NotificationGroup, index: number) => {\n switch (group.type) {\n case 'like':\n if (group.post) {\n navigate(`/${group.post.type === 'article' ? 'reader' : 'notes'}/${encodeURIComponent(group.post.id)}`);\n }\n break;\n case 'reply':\n if (group.post && group.inReplyTo) {\n navigate(`/notes/${encodeURIComponent(group.post.id)}`);\n }\n break;\n case 'repost':\n if (group.post) {\n navigate(`/${group.post.type === 'article' ? 'reader' : 'notes'}/${encodeURIComponent(group.post.id)}`);\n }\n break;\n case 'follow':\n if (group.actors.length > 1) {\n toggleOpen(group.id || `${group.type}_${index}`);\n } else {\n handleProfileClick(group.actors[0].handle, navigate);\n }\n break;\n case 'mention':\n if (group.post) {\n navigate(`/notes/${encodeURIComponent(group.post.id)}`);\n }\n break;\n }\n };\n\n if (error && isApiError(error)) {\n return <AppError errorCode={error.code} statusCode={error.statusCode}/>;\n }\n\n return (\n <Layout>\n <div className='z-0 flex w-full flex-col items-center'>\n {\n isLoading === false && notificationGroups.length === 0 && (\n <EmptyViewIndicator>\n <EmptyViewIcon><LucideIcon.Bell /></EmptyViewIcon>\n Quiet for now, but not for long! When someone likes, boosts, or replies to you, you&apos;ll find it here.\n </EmptyViewIndicator>\n )\n }\n {\n (notificationGroups.length > 0) && (\n <>\n <div className='my-8 flex w-full max-w-[620px] flex-col max-md:mt-5'>\n {notificationGroups.map((group, index) => (\n <React.Fragment key={group.id || `${group.type}_${index}`}>\n <NotificationItem\n centerAlign={group.actors.length < 2 && group.type === 'follow'}\n className='hover:bg-gray-75 dark:hover:bg-gray-950'\n isGrouped={group.actors.length > 1}\n onClick={() => handleNotificationClick(group, index)}\n >\n {isLoading ?\n <Skeleton className='rounded-full' containerClassName='flex h-10 w-10' /> :\n (group.actors.length > 1 ?\n <NotificationItem.Icon type={group.type} /> :\n <div className='relative'>\n <APAvatar\n key={group.actors[0].id}\n author={{\n icon: {\n url: group.actors[0].avatarUrl || ''\n },\n name: group.actors[0].name,\n handle: group.actors[0].handle\n }}\n size='notification'\n />\n <NotificationIcon className='absolute -bottom-1 -right-1 z-10 border-2 border-white dark:border-black' notificationType={group.type} size='sm' />\n </div>\n )\n }\n {group.actors.length > 1 && <NotificationItem.Avatars>\n <div className='flex w-full flex-col'>\n <div className='relative flex items-center pl-2'>\n {!openStates[group.id || `${group.type}_${index}`] && group.actors.slice(0, maxAvatars).map((actor: ActorProperties) => (\n <APAvatar\n key={actor.id}\n author={{\n icon: {\n url: actor.avatarUrl || ''\n },\n name: actor.name,\n handle: actor.handle\n }}\n className='bg-[#F3F3F3]! group-hover:bg-[#EDEEF0]! -ml-2 outline outline-2 outline-white group-hover:outline-gray-75 dark:outline-black group-hover:dark:outline-gray-950'\n size='notification'\n />\n ))}\n {group.actors.length > maxAvatars && (!openStates[group.id || `${group.type}_${index}`]) && (\n <div className='absolute right-[28px] z-10 flex size-9 items-center justify-center rounded-full bg-black/50 text-base font-semibold tracking-tightest text-white'>\n {`+${group.actors.length - maxAvatars}`}\n </div>\n )}\n\n {group.actors.length > 1 && (\n <Button className={`group flex items-center gap-0.5 text-gray-700 hover:bg-transparent hover:text-black dark:text-gray-600 dark:hover:text-white ${openStates[group.id || `${group.type}_${index}`] ? 'ml-[-20px]' : 'ml-0 w-[28px]'}`} variant='ghost' onClick={(event?: React.MouseEvent<HTMLElement>) => {\n event?.stopPropagation();\n toggleOpen(group.id || `${group.type}_${index}`);\n }}>\n <LucideIcon.ChevronDown className={`${openStates[group.id || `${group.type}_${index}`] ? 'rotate-180' : ''}`} size={20} strokeWidth={1.5} />\n {openStates[group.id || `${group.type}_${index}`] ? 'Hide' : <span className='sr-only'>Show all</span>}\n </Button>\n )}\n </div>\n <div className={`overflow-hidden transition-all duration-300 ease-in-out ${openStates[group.id || `${group.type}_${index}`] ? 'mb-2 max-h-[1384px] opacity-100' : 'max-h-0 opacity-0'}`}>\n {openStates[group.id || `${group.type}_${index}`] && group.actors.length > 1 && (\n <div className='flex flex-col gap-2 pt-2'>\n {group.actors.map((actor: ActorProperties) => (\n <div\n key={actor.id}\n className='group/item flex items-center justify-between gap-4 break-anywhere'\n onClick={(e) => {\n e?.stopPropagation();\n handleProfileClick(actor.handle, navigate);\n }}\n >\n <div className='flex min-w-0 items-center'>\n <APAvatar author={{\n icon: {\n url: actor.avatarUrl || ''\n },\n name: actor.name,\n handle: actor.handle\n }} size='xs' />\n <span className='ml-2 line-clamp-1 text-base font-semibold group-hover/item:underline dark:text-white'>{actor.name}</span>\n <span className='ml-1 line-clamp-1 text-base text-gray-700 dark:text-gray-600'>{actor.handle}</span>\n </div>\n {group.type === 'follow' && !actor.followedByMe && (\n <FollowButton\n following={false}\n handle={actor.handle}\n variant=\"link\"\n />\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n </NotificationItem.Avatars>}\n <NotificationItem.Content>\n <div>\n {isLoading ?\n <>\n <Skeleton />\n <Skeleton className='w-full max-w-60' />\n </> :\n <div className='flex justify-between'>\n <div className='flex items-center gap-1'>\n <span className='truncate'><NotificationGroupDescription group={group} /></span>\n {group.actors.length < 2 &&\n <>\n <span className='mt-px text-[8px] text-gray-700 dark:text-gray-600'>&bull;</span>\n <span className='mt-0.5 text-sm text-gray-700 dark:text-gray-600'>{renderTimestamp(group, false)}</span>\n </>\n }\n </div>\n {/* Follow button for singular follow, reply, and mention */}\n {group.actors.length === 1 && (group.type === 'follow' || group.type === 'reply' || group.type === 'mention') && !group.actors[0].followedByMe && (\n <FollowButton\n following={false}\n handle={group.actors[0].handle}\n variant=\"link\"\n />\n )}\n </div>\n }\n </div>\n {(\n ((group.type === 'reply' && group.inReplyTo) || group.type === 'mention') ||\n (group.type === 'like' && !group.post?.name && group.post?.content) ||\n (group.type === 'repost' && !group.post?.name && group.post?.content)\n ) && (\n (group.type !== 'reply' && group.type !== 'mention' ?\n <div className='ap-note-content mt-0.5 line-clamp-1 text-pretty text-sm text-gray-700 dark:text-gray-600'>\n {group.post?.type === 'article' && group.post?.title && <>{group.post.title} &mdash; </>}\n <span dangerouslySetInnerHTML={{__html: stripHtml(group.post?.content || '')}} />\n </div> :\n <>\n <div className='mt-2.5 rounded-md bg-gray-100 px-5 py-[14px] group-hover:bg-gray-200 dark:bg-gray-925/30 group-hover:dark:bg-black/40'>\n <ProfileLinkedContent\n className='ap-note-content text-pretty'\n content={group.post?.content || ''}\n stripTags={['a']}\n />\n {group.post && group.post.attachments && group.post.attachments.length > 0 && (\n <div className='notification-attachments mb-1 [&_.attachment-gallery]:flex [&_.attachment-gallery]:flex-wrap [&_img]:aspect-square [&_img]:max-w-[calc(20%-6.4px)]'>\n {renderFeedAttachment(\n {...group.post, type: 'Note', attachment: group.post.attachments}\n )}\n </div>\n )}\n </div>\n </>\n )\n )}\n {((group.type === 'reply' && group.post) || group.type === 'mention') && (\n <div className=\"mt-1.5\">\n <FeedItemStats\n actor={{\n ...group.actors[0],\n icon: {\n url: group.actors[0].avatarUrl || ''\n },\n id: group.actors[0].url,\n preferredUsername: group.actors[0].handle?.replace(/^@([^@]+)@.*$/, '$1') || 'unknown'\n }}\n buttonClassName='hover:bg-gray-200'\n commentCount={group.post.replyCount || 0}\n layout=\"notification\"\n likeCount={group.post.likeCount || 0}\n object={{\n ...group.post,\n liked: group.post.likedByMe,\n reposted: group.post.repostedByMe\n }}\n repostCount={group.post.repostCount || 0}\n onLikeClick={handleLikeClick}\n />\n </div>\n )}\n </NotificationItem.Content>\n </NotificationItem>\n {index < notificationGroups.length - 1 &&\n <div className='pl-[52px]'><Separator /></div>\n }\n </React.Fragment>\n ))}\n </div>\n <div ref={loadMoreRef} className='h-1'></div>\n {isFetchingNextPage && (\n <div className='-mt-4 mb-8 flex flex-col items-center justify-center gap-4 text-center'>\n <LoadingIndicator size='md' />\n </div>\n )}\n </>\n )\n }\n </div>\n </Layout>\n );\n};\n\nexport default Notifications;\n"],"names":["__iconNode","Repeat2","createLucideIcon","UserRoundCheck","NotificationIcon","notificationType","size","className","icon","badgeColor","iconColor","iconSize","strokeWidth","jsx","LucideIcon.UserRoundCheck","LucideIcon.Heart","LucideIcon.Reply","LucideIcon.Repeat2","LucideIcon.AtSign","NotificationContext","React","NotificationItem","isGrouped","centerAlign","children","onClick","url","Icon","type","Avatars","Content","Separator","getTimeBucket","timestamp","timeMs","groupNotifications","notifications","groups","lastType","sequenceCounter","notification","groupKey","timeBucket","sequence","_a","_b","a","NotificationGroupDescription","group","firstActor","otherActors","hasOthers","actorClass","navigate","useNavigateWithBasePath","actorText","jsxs","Fragment","ProfilePreviewHoverCard","e","handleProfileClick","ProfileLinkedContent","content","stripTags","contentRef","useRef","useEffect","element","handleProfileLinkClick","link","handle","stripHtml","Notifications","openStates","setOpenStates","toggleOpen","groupId","prev","handleLikeClick","maxAvatars","data","error","fetchNextPage","hasNextPage","isFetchingNextPage","isLoading","useNotificationsForUser","notificationGroups","page","observerRef","loadMoreRef","entries","handleNotificationClick","index","isApiError","AppError","Layout","EmptyViewIndicator","EmptyViewIcon","LucideIcon.Bell","Skeleton","APAvatar","actor","Button","event","LucideIcon.ChevronDown","FollowButton","renderTimestamp","_c","_d","_e","_f","_g","_h","renderFeedAttachment","FeedItemStats","_i","LoadingIndicator"],"mappings":"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","x_google_ignoreList":[0,1]}
@@ -1,8 +1,8 @@
1
- import { a6 as ee, R as Z, j as n, s as Fn, b as y, e as L, bb as Ln, bc as Rn, B as $, bF as te, bd as On, bG as ae, c as W, bH as oe, W as zn, d as Tn, bI as hn, S as N, P as re, A as ie, h as de, g as Cn, r as se, aa as ce, aU as le, k as mn, F as cn, i as ln, bJ as ge, bK as B, ac as pe, bL as Sn, a as ue, u as he, l as me, L as ke, D as fe, n as be, o as xe, p as ve, bM as ye, bN as we, bO as je, aw as _n, ax as ze } from "./index-DIicyWvr.mjs";
2
- import { u as Ce, D as Se, A as _e, S as En } from "./deleted-feed-item-BkXeOOSC.mjs";
3
- import { T as Ee } from "./topic-filter-YL1wy3Q1.mjs";
4
- import { S as Ne } from "./separator-Dgj8LPTF.mjs";
5
- import { I as Nn } from "./inbox-BIeU-G-G.mjs";
1
+ import { a6 as ee, R as Z, j as n, s as Fn, b as y, e as L, bb as Ln, bc as Rn, B as $, bF as te, bd as On, bG as ae, c as W, bH as oe, W as zn, d as Tn, bI as hn, S as N, P as re, A as ie, h as de, g as Cn, r as se, aa as ce, aU as le, k as mn, F as cn, i as ln, bJ as ge, bK as B, ac as pe, bL as Sn, a as ue, u as he, l as me, L as ke, D as fe, n as be, o as xe, p as ve, bM as ye, bN as we, bO as je, aw as _n, ax as ze } from "./index-q4Ygdo0-.mjs";
2
+ import { u as Ce, D as Se, A as _e, S as En } from "./deleted-feed-item-C6ttBewp.mjs";
3
+ import { T as Ee } from "./topic-filter-DqTL6EKu.mjs";
4
+ import { S as Ne } from "./separator-BljDgTc9.mjs";
5
+ import { I as Nn } from "./inbox-DKED2HYQ.mjs";
6
6
  /**
7
7
  * @license lucide-react v0.553.0 - ISC
8
8
  *
@@ -130,7 +130,7 @@ const fn = ["1.5rem", "1.6rem", "1.7rem", "1.8rem", "2rem"], Q = {
130
130
  onResetFontSize: v,
131
131
  onOpenChange: p
132
132
  }) => /* @__PURE__ */ n.jsxs(Ln, { modal: !1, onOpenChange: p, children: [
133
- /* @__PURE__ */ n.jsx(Rn, { asChild: !0, children: /* @__PURE__ */ n.jsx($, { className: `size-9 rounded-full ${F[t].button}`, variant: "ghost", children: /* @__PURE__ */ n.jsx(te.Typography, { className: "!size-[18px]" }) }) }),
133
+ /* @__PURE__ */ n.jsx(Rn, { asChild: !0, children: /* @__PURE__ */ n.jsx($, { className: `size-9 rounded-full ${F[t].button}`, variant: "ghost", children: /* @__PURE__ */ n.jsx(te.Typography, { className: "size-[18px]!" }) }) }),
134
134
  /* @__PURE__ */ n.jsx(On, { align: "end", className: "w-[224px]", onCloseAutoFocus: (o) => o.preventDefault(), onOpenAutoFocus: (o) => o.preventDefault(), children: /* @__PURE__ */ n.jsxs("div", { className: "flex flex-col gap-4", children: [
135
135
  /* @__PURE__ */ n.jsxs("div", { className: "flex items-center justify-between gap-[6px]", children: [
136
136
  /* @__PURE__ */ n.jsx(
@@ -226,7 +226,7 @@ const fn = ["1.5rem", "1.6rem", "1.7rem", "1.8rem", "2rem"], Q = {
226
226
  tocItems: t,
227
227
  iframeElement: r,
228
228
  modalRef: a,
229
- className: i = "!visible absolute inset-y-0 right-7 z-40 hidden lg:!block",
229
+ className: i = "visible! absolute inset-y-0 right-7 z-40 hidden lg:block!",
230
230
  onOpenChange: d
231
231
  }) => {
232
232
  const [u, s] = y(null), h = Z.useRef(!1), v = (p) => {
@@ -4949,7 +4949,7 @@ a.kg-cta-button {
4949
4949
  ] }) })
4950
4950
  ] })
4951
4951
  ] }),
4952
- !T && /* @__PURE__ */ n.jsxs("div", { className: "pointer-events-none !visible sticky bottom-0 hidden items-end justify-between px-10 pb-[42px] lg:!flex", children: [
4952
+ !T && /* @__PURE__ */ n.jsxs("div", { className: "visible! lg:flex! pointer-events-none sticky bottom-0 hidden items-end justify-between px-10 pb-[42px]", children: [
4953
4953
  /* @__PURE__ */ n.jsx("div", { className: "pointer-events-auto text-gray-600", children: ge(m.content ?? "") }),
4954
4954
  /* @__PURE__ */ n.jsxs("div", { className: "pointer-events-auto min-w-10 text-right text-gray-600 transition-all duration-200 ease-out", children: [
4955
4955
  bn,
@@ -5023,7 +5023,7 @@ a.kg-cta-button {
5023
5023
  },
5024
5024
  `${f.id}-${f.type}-${g}`
5025
5025
  )),
5026
- u && /* @__PURE__ */ n.jsx("li", { className: "flex flex-col items-center justify-center space-y-4 text-center", children: /* @__PURE__ */ n.jsx(mn, { size: "md" }) })
5026
+ u && /* @__PURE__ */ n.jsx("li", { className: "flex flex-col items-center justify-center gap-4 text-center", children: /* @__PURE__ */ n.jsx(mn, { size: "md" }) })
5027
5027
  ] }),
5028
5028
  /* @__PURE__ */ n.jsx("div", { ref: A, className: "h-1" })
5029
5029
  ] }) }) }) }) : a !== "following" ? /* @__PURE__ */ n.jsx("div", { className: "mt-[24vh]", children: /* @__PURE__ */ n.jsx(
@@ -5049,7 +5049,7 @@ a.kg-cta-button {
5049
5049
  onOpenChange: (f) => {
5050
5050
  f || (v ? p() : h("/reader")), c(f);
5051
5051
  },
5052
- children: /* @__PURE__ */ n.jsxs(be, { className: "inset-y-3 h-[calc(100vh-24px)] w-screen max-w-[calc(100vw-24px)] !animate-none p-0 focus:outline-none dark:bg-gray-950", children: [
5052
+ children: /* @__PURE__ */ n.jsxs(be, { className: "animate-none! focus:outline-hidden inset-y-3 h-[calc(100vh-24px)] w-screen max-w-[calc(100vw-24px)] p-0 dark:bg-gray-950", children: [
5053
5053
  /* @__PURE__ */ n.jsxs(xe, { className: "hidden", children: [
5054
5054
  /* @__PURE__ */ n.jsx(ve, { children: "Reader" }),
5055
5055
  /* @__PURE__ */ n.jsx(ye, { children: "Ghost reader for long form articles" })
@@ -5082,4 +5082,4 @@ a.kg-cta-button {
5082
5082
  export {
5083
5083
  $t as default
5084
5084
  };
5085
- //# sourceMappingURL=index-BurflorF.mjs.map
5085
+ //# sourceMappingURL=index-Cty-No3l.mjs.map