ghost 6.11.0 → 6.12.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 (435) hide show
  1. package/components/tryghost-i18n-6.12.0.tgz +0 -0
  2. package/core/boot.js +4 -2
  3. package/core/built/admin/assets/{_baseAssignValue-BX8EallQ.js → _baseAssignValue-hsL6ItjC.js} +1 -1
  4. package/core/built/admin/assets/{a-large-small-CKZJgscl.js → a-large-small-BPPu_Iy7.js} +1 -1
  5. package/core/built/admin/assets/admin-x-settings/admin-x-settings.js +1 -1
  6. package/core/built/admin/assets/admin-x-settings/{code-editor-view-n8DFeXbv.mjs → code-editor-view-Bq6l5arq.mjs} +2 -2
  7. package/core/built/admin/assets/admin-x-settings/{index-v6qQgUXt.mjs → index-CKaxer_o.mjs} +2 -2
  8. package/core/built/admin/assets/admin-x-settings/{index-CXL12uvO.mjs → index-CtYEAgeN.mjs} +2 -2
  9. package/core/built/admin/assets/admin-x-settings/{index-D4ye6uvI.mjs → index-D4NstoNQ.mjs} +11 -6
  10. package/core/built/admin/assets/admin-x-settings/{modals-CdsPaTfy.mjs → modals-BzljHVa7.mjs} +2 -2
  11. package/core/built/admin/assets/{at-sign-CqQzllfI.js → at-sign-CYnGzOFc.js} +1 -1
  12. package/core/built/admin/assets/{audience-select-DQD7iDOb.js → audience-select-DYoxiiwy.js} +1 -1
  13. package/core/built/admin/assets/{avatar-flipboard-uq7ptTxT.js → avatar-flipboard-C9-npfmZ.js} +1 -1
  14. package/core/built/admin/assets/{bluesky-sharing-qyIGv6Ny.js → bluesky-sharing-BGcmGcee.js} +1 -1
  15. package/core/built/admin/assets/{chart-DGA1MaFs.js → chart-CqJxisVP.js} +1 -1
  16. package/core/built/admin/assets/{chunk.524.1289543297329587cf8a.js → chunk.524.74a9629dd2ba0d21bbef.js} +7 -7
  17. package/core/built/admin/assets/{chunk.582.344ea0d0a16d671345cd.js → chunk.582.3846471396b3a7c46e66.js} +8 -8
  18. package/core/built/admin/assets/{code-editor-view-Bz6kXDiv.js → code-editor-view-C8l3gNnO.js} +1 -1
  19. package/core/built/admin/assets/{comments-C-lkEDkz.js → comments-CpHDoxov.js} +1 -1
  20. package/core/built/admin/assets/{copy-BFuV16bY.js → copy-DWiB-781.js} +1 -1
  21. package/core/built/admin/assets/{data-list-Bw1CQEZ9.js → data-list-yngXNZDF.js} +1 -1
  22. package/core/built/admin/assets/{deleted-feed-item-CmNbSYiO.js → deleted-feed-item-C0FcyLMN.js} +1 -1
  23. package/core/built/admin/assets/{edit-profile-DlIPB2km.js → edit-profile-BjtDkDAq.js} +1 -1
  24. package/core/built/admin/assets/{empty-indicator-DBrIZcFq.js → empty-indicator-BXWniwsl.js} +1 -1
  25. package/core/built/admin/assets/{en-BBc7b85q.js → en-B8qaJx-T.js} +1 -1
  26. package/core/built/admin/assets/{feed-B3XQzKZl.js → feed-DsCVb1SA.js} +1 -1
  27. package/core/built/admin/assets/{filters-DUFXZZnu.js → filters-jAXQSPq6.js} +1 -1
  28. package/core/built/admin/assets/{gh-chart-BV97-O7c.js → gh-chart-DwTCK8z_.js} +1 -1
  29. package/core/built/admin/assets/{ghost-9aa1e7c5992f122dba6932af78bf8e56.js → ghost-6367d022df9db9dacbcb9bfa30232ec7.js} +2 -2
  30. package/core/built/admin/assets/{growth-njR0GqK2.js → growth-DshcRqda.js} +1 -1
  31. package/core/built/admin/assets/{hash-CdH0ikFp.js → hash-p9dv0yuc.js} +1 -1
  32. package/core/built/admin/assets/{inbox-Bd0uf1Ez.js → inbox-CRoP9sy5.js} +1 -1
  33. package/core/built/admin/assets/{index-Kji6JKl7.js → index-6syrC9X1.js} +1 -1
  34. package/core/built/admin/assets/{index-C7M19LpB.js → index-BKtz3UH0.js} +1 -1
  35. package/core/built/admin/assets/{index-DWk7hKRR.js → index-BwY94Fb4.js} +1 -1
  36. package/core/built/admin/assets/{index-BFhECYgc.js → index-C3DF6aFe.js} +1 -1
  37. package/core/built/admin/assets/index-C6NCNp1B.js +1 -0
  38. package/core/built/admin/assets/{index-BYawr8p9.js → index-CJU9a2PB.js} +3 -3
  39. package/core/built/admin/assets/{index-CIE2_z5J.js → index-CUWE7aD1.js} +1 -1
  40. package/core/built/admin/assets/{index-DgRIbSpg.js → index-CuQ_II0e.js} +1 -1
  41. package/core/built/admin/assets/{index-Birw80cQ.js → index-DG8f-HuU.js} +1 -1
  42. package/core/built/admin/assets/{index-DziHC2du.js → index-DItZTRQ4.js} +1 -1
  43. package/core/built/admin/assets/{index-DG53N3Xt.js → index-eLx96SEn.js} +1 -1
  44. package/core/built/admin/assets/{index-DCw6JaEl.js → index-j2_Q-_8H.js} +1 -1
  45. package/core/built/admin/assets/{index-BZ21H0xH.js → index-qWpHJAMP.js} +1 -1
  46. package/core/built/admin/assets/{index-DXCu9e7c.js → index-sy6xRtoO.js} +1 -1
  47. package/core/built/admin/assets/{koenig-lexical-BDJVCHtm.js → koenig-lexical-DgAlBHHS.js} +1 -1
  48. package/core/built/admin/assets/{kpi-card-cv8roErt.js → kpi-card-CHZSLw4p.js} +1 -1
  49. package/core/built/admin/assets/{kpis-Dt4OFY3L.js → kpis-DzbAHfKK.js} +1 -1
  50. package/core/built/admin/assets/{links-08beB3Ij.js → links-BQHRbn46.js} +1 -1
  51. package/core/built/admin/assets/{lucide-react-DKlmxVQI.js → lucide-react-B7UnD_Dp.js} +1 -1
  52. package/core/built/admin/assets/{main-layout-Cl09wG7F.js → main-layout-9nmU5WlG.js} +1 -1
  53. package/core/built/admin/assets/{message-square-text-CaMVBVPr.js → message-square-text-CS3iRuPc.js} +1 -1
  54. package/core/built/admin/assets/{minus-2XwCoFJV.js → minus-emzwh6hq.js} +1 -1
  55. package/core/built/admin/assets/{modals-CIgzYQgv.js → modals-CumFuZ2d.js} +1 -1
  56. package/core/built/admin/assets/{moderation-FjlsSym6.js → moderation-DyfFc9m4.js} +1 -1
  57. package/core/built/admin/assets/{newsletter-BNOwZNlE.js → newsletter-BWul5IFc.js} +1 -1
  58. package/core/built/admin/assets/{newsletters-DUusEYSg.js → newsletters-N6bwI1OF.js} +1 -1
  59. package/core/built/admin/assets/{note-BpYwIDK6.js → note-CiBzkHzz.js} +1 -1
  60. package/core/built/admin/assets/{overview-Y5QYPClr.js → overview-D9gRvn7X.js} +1 -1
  61. package/core/built/admin/assets/{pagemenu-BMXHDXYy.js → pagemenu-aHubMPwB.js} +1 -1
  62. package/core/built/admin/assets/{post-analytics-UerFnJse.js → post-analytics-Bm9xH8nA.js} +1 -1
  63. package/core/built/admin/assets/{post-analytics-context-geHk7rOj.js → post-analytics-context-C7oW3aBz.js} +1 -1
  64. package/core/built/admin/assets/{post-analytics-header-DXfc4KeX.js → post-analytics-header-BjGFgN6A.js} +1 -1
  65. package/core/built/admin/assets/{post-share-modal-Dql4fYjR.js → post-share-modal-Su923uIc.js} +1 -1
  66. package/core/built/admin/assets/{posts-Bsvw11Zo.js → posts-BwP7BNcB.js} +1 -1
  67. package/core/built/admin/assets/{referrers-B8xJpCcR.js → referrers-n_ln9DqI.js} +1 -1
  68. package/core/built/admin/assets/{repeat-COP-3g8d.js → repeat-ms5ocvE0.js} +1 -1
  69. package/core/built/admin/assets/{reply-JE8tmvOn.js → reply-BvO85IDn.js} +1 -1
  70. package/core/built/admin/assets/{select-BhvNY3I-.js → select-B4QhMW5f.js} +1 -1
  71. package/core/built/admin/assets/{settings-BJwVfuWG.js → settings-D5rGcWJ7.js} +4 -4
  72. package/core/built/admin/assets/{settings-C6ZUZQe4.js → settings-QtZ6a2TL.js} +1 -1
  73. package/core/built/admin/assets/{sort-button-iOtR-vQ1.js → sort-button-84sYUZMN.js} +1 -1
  74. package/core/built/admin/assets/{source-icon-C2iFWMlV.js → source-icon-Bzw-AU8p.js} +1 -1
  75. package/core/built/admin/assets/{sprout-BW9HFVU8.js → sprout-C2R5CbXV.js} +1 -1
  76. package/core/built/admin/assets/{square-BCNGSZhW.js → square-DT1uWkxs.js} +1 -1
  77. package/core/built/admin/assets/stats/{audience-select-DNAWmT7R.mjs → audience-select-fTCiZ9MT.mjs} +3 -3
  78. package/core/built/admin/assets/stats/{index-DbGvSTMe.mjs → index-BKgioyC7.mjs} +5 -5
  79. package/core/built/admin/assets/stats/{index-s19ZmxbX.mjs → index-CR2t5Xd-.mjs} +5 -5
  80. package/core/built/admin/assets/stats/index-DEkYwR7C.mjs +739 -0
  81. package/core/built/admin/assets/stats/{index-BS3KMSy9.mjs → index-Djwey97a.mjs} +5 -5
  82. package/core/built/admin/assets/stats/{index-MOQSSYwT.mjs → index-FiU_XgEe.mjs} +6 -6
  83. package/core/built/admin/assets/stats/{sort-button-D76rcldr.mjs → sort-button-Bvi1wfa7.mjs} +3 -3
  84. package/core/built/admin/assets/stats/{stats-CJ7fhUyT.mjs → stats-Bbm6yWZq.mjs} +2 -2
  85. package/core/built/admin/assets/stats/stats.js +1 -1
  86. package/core/built/admin/assets/stats/{tabs-CkbxYgOE.mjs → tabs-BKwH5k-q.mjs} +3 -3
  87. package/core/built/admin/assets/stats/{url-helpers-DICtqCrE.mjs → url-helpers-DmHnUIGc.mjs} +9 -9
  88. package/core/built/admin/assets/stats/{use-growth-stats-DzO7zEy4.mjs → use-growth-stats-BVj3j1hb.mjs} +3 -3
  89. package/core/built/admin/assets/{stats-r0Bphuvi.js → stats-B1mhlQSp.js} +1 -1
  90. package/core/built/admin/assets/{stats-view-DzZxrBDz.js → stats-view-C6MTCwRW.js} +1 -1
  91. package/core/built/admin/assets/{step-1-CUoUOyMm.js → step-1-CzQmZJ93.js} +1 -1
  92. package/core/built/admin/assets/{step-2-CpAkPD8D.js → step-2-DXGDWSQo.js} +1 -1
  93. package/core/built/admin/assets/{step-3-Ci6oJDmK.js → step-3-CYuxXKac.js} +1 -1
  94. package/core/built/admin/assets/{table-DeBuf80X.js → table-mjAkKNdb.js} +1 -1
  95. package/core/built/admin/assets/{tabs-C2sFfNcp.js → tabs-BwQ-i6MY.js} +1 -1
  96. package/core/built/admin/assets/{tags-Bl6G5rvf.js → tags-BkUqCuvX.js} +1 -1
  97. package/core/built/admin/assets/{tags-BL_N4nn2.js → tags-DXDZbfxp.js} +1 -1
  98. package/core/built/admin/assets/{toggle-group-B2X-8giI.js → toggle-group-CqDO3Kkx.js} +1 -1
  99. package/core/built/admin/assets/{topic-filter-DeqMID_s.js → topic-filter-DnuJJBAE.js} +1 -1
  100. package/core/built/admin/assets/{trash-BglGemAb.js → trash-CZ3EXwTL.js} +1 -1
  101. package/core/built/admin/assets/{url-helpers-84icqAuE.js → url-helpers-BE3VXr__.js} +1 -1
  102. package/core/built/admin/assets/{use-growth-stats-DF-7tL8g.js → use-growth-stats-CiuWWM6O.js} +1 -1
  103. package/core/built/admin/assets/{use-infinite-virtual-scroll-BHH7oscK.js → use-infinite-virtual-scroll-BjATkxBj.js} +1 -1
  104. package/core/built/admin/assets/{use-simple-pagination-BsvYfixw.js → use-simple-pagination-C9cb7dDz.js} +1 -1
  105. package/core/built/admin/assets/{user-round-check-BjHbfXKY.js → user-round-check-D3ihrrKL.js} +1 -1
  106. package/core/built/admin/assets/{wallet-cards-KaTkgqvi.js → wallet-cards-Do7nPf3f.js} +1 -1
  107. package/core/built/admin/assets/{web-CUWbpFil.js → web-BEwI2Gfy.js} +1 -1
  108. package/core/built/admin/index-forward.html +4 -4
  109. package/core/built/admin/index.html +3 -3
  110. package/core/frontend/web/middleware/index.js +1 -0
  111. package/core/frontend/web/middleware/serve-indexnow-key.js +66 -0
  112. package/core/frontend/web/site.js +3 -0
  113. package/core/server/api/endpoints/authentication.js +1 -1
  114. package/core/server/api/endpoints/pages.js +1 -1
  115. package/core/server/api/endpoints/posts-public.js +1 -1
  116. package/core/server/api/endpoints/posts.js +1 -1
  117. package/core/server/api/endpoints/search-index-public.js +1 -1
  118. package/core/server/api/endpoints/search-index.js +1 -1
  119. package/core/server/api/endpoints/users.js +1 -1
  120. package/core/server/api/endpoints/utils/serializers/input/settings.js +2 -1
  121. package/core/server/api/endpoints/utils/serializers/output/mappers/posts.js +1 -1
  122. package/core/server/api/endpoints/utils/validators/input/settings.js +1 -1
  123. package/core/server/data/exporter/table-lists.js +2 -1
  124. package/core/server/data/migrations/versions/6.12/2026-01-08-11-48-16-add-indexnow-api-key-setting.js +9 -0
  125. package/core/server/data/schema/default-settings/default-settings.json +6 -0
  126. package/core/server/lib/lexical.js +1 -1
  127. package/core/server/models/settings.js +2 -1
  128. package/core/server/services/activitypub/{ActivityPubServiceWrapper.js → activity-pub-service-wrapper.js} +1 -1
  129. package/core/server/services/activitypub/{ActivityPubService.ts → activity-pub-service.ts} +1 -1
  130. package/core/server/services/activitypub/index.js +1 -1
  131. package/core/server/services/adapter-manager/index.js +1 -1
  132. package/core/server/services/announcement-bar-service/{AnnouncementBarSettings.js → announcement-bar-settings.js} +1 -1
  133. package/core/server/services/announcement-bar-service/index.js +1 -1
  134. package/core/server/services/audience-feedback/{AudienceFeedbackController.js → audience-feedback-controller.js} +3 -3
  135. package/core/server/services/audience-feedback/index.js +4 -4
  136. package/core/server/services/auth/session/express-session.js +1 -1
  137. package/core/server/services/comments/{CommentsController.js → comments-controller.js} +2 -2
  138. package/core/server/services/comments/{CommentsServiceEmails.js → comments-service-emails.js} +1 -1
  139. package/core/server/services/comments/{CommentsService.js → comments-service.js} +1 -1
  140. package/core/server/services/comments/index.js +3 -3
  141. package/core/server/services/custom-redirects/index.js +2 -2
  142. package/core/server/services/donations/{DonationBookshelfRepository.ts → donation-bookshelf-repository.ts} +1 -1
  143. package/core/server/services/donations/{DonationServiceWrapper.js → donation-service-wrapper.js} +1 -1
  144. package/core/server/services/donations/index.js +1 -1
  145. package/core/server/services/email-address/{EmailAddressServiceWrapper.js → email-address-service-wrapper.js} +2 -2
  146. package/core/server/services/email-address/{EmailAddressService.js → email-address-service.js} +4 -4
  147. package/core/server/services/email-address/{EmailAddressService.ts → email-address-service.ts} +1 -1
  148. package/core/server/services/email-address/index.js +1 -1
  149. package/core/server/services/email-analytics/{EmailAnalyticsProviderMailgun.js → email-analytics-provider-mailgun.js} +1 -1
  150. package/core/server/services/email-analytics/{EmailAnalyticsServiceWrapper.js → email-analytics-service-wrapper.js} +5 -5
  151. package/core/server/services/email-analytics/{EmailAnalyticsService.js → email-analytics-service.js} +2 -2
  152. package/core/server/services/email-analytics/index.js +1 -1
  153. package/core/server/services/email-analytics/jobs/fetch-latest/index.js +1 -1
  154. package/core/server/services/email-service/{BatchSendingService.js → batch-sending-service.js} +8 -8
  155. package/core/server/services/email-service/{EmailEventProcessor.js → email-event-processor.js} +6 -6
  156. package/core/server/services/email-service/{EmailEventStorage.js → email-event-storage.js} +1 -1
  157. package/core/server/services/email-service/{EmailRenderer.js → email-renderer.js} +1 -1
  158. package/core/server/services/email-service/{EmailServiceWrapper.js → email-service-wrapper.js} +9 -9
  159. package/core/server/services/email-service/{EmailService.js → email-service.js} +13 -13
  160. package/core/server/services/email-service/index.js +1 -1
  161. package/core/server/services/email-service/{MailgunEmailProvider.js → mailgun-email-provider.js} +1 -1
  162. package/core/server/services/email-service/{SendingService.js → sending-service.js} +6 -6
  163. package/core/server/services/email-suppression-list/{InMemoryEmailSuppressionList.js → in-memory-email-suppression-list.js} +1 -1
  164. package/core/server/services/email-suppression-list/{MailgunEmailSuppressionList.js → mailgun-email-suppression-list.js} +3 -3
  165. package/core/server/services/email-suppression-list/service.js +2 -2
  166. package/core/server/services/explore/index.js +2 -2
  167. package/core/server/services/explore-ping/index.js +2 -2
  168. package/core/server/services/frontend-data-service/index.js +1 -1
  169. package/core/server/services/identity-tokens/{IdentityTokenServiceWrapper.js → identity-token-service-wrapper.js} +1 -1
  170. package/core/server/services/identity-tokens/index.js +1 -1
  171. package/core/server/services/indexnow.js +212 -0
  172. package/core/server/services/invites/index.js +1 -1
  173. package/core/server/services/link-redirection/index.js +2 -2
  174. package/core/server/services/link-redirection/{LinkRedirectRepository.js → link-redirect-repository.js} +1 -1
  175. package/core/server/services/link-redirection/{LinkRedirectsService.js → link-redirects-service.js} +2 -2
  176. package/core/server/services/link-redirection/{RedirectEvent.js → redirect-event.js} +1 -1
  177. package/core/server/services/link-tracking/index.js +3 -3
  178. package/core/server/services/link-tracking/{LinkClickRepository.js → link-click-repository.js} +1 -1
  179. package/core/server/services/link-tracking/{LinkClickTrackingService.js → link-click-tracking-service.js} +4 -4
  180. package/core/server/services/link-tracking/{PostLinkRepository.js → post-link-repository.js} +7 -7
  181. package/core/server/services/mail/{GhostMailer.js → ghost-mailer.js} +1 -1
  182. package/core/server/services/mail/index.js +2 -2
  183. package/core/server/services/media-inliner/service.js +1 -1
  184. package/core/server/services/member-attribution/README.md +6 -6
  185. package/core/server/services/member-attribution/{AttributionBuilder.js → attribution-builder.js} +4 -4
  186. package/core/server/services/member-attribution/index.js +5 -5
  187. package/core/server/services/member-attribution/{MemberAttributionService.js → member-attribution-service.js} +9 -9
  188. package/core/server/services/member-attribution/{ReferrerTranslator.js → referrer-translator.js} +1 -1
  189. package/core/server/services/member-attribution/{UrlTranslator.js → url-translator.js} +1 -1
  190. package/core/server/services/member-welcome-emails/constants.js +22 -1
  191. package/core/server/services/member-welcome-emails/service.js +23 -5
  192. package/core/server/services/members/api.js +1 -1
  193. package/core/server/services/members/importer/index.js +3 -3
  194. package/core/server/services/members/importer/{MembersCSVImporter.js → members-csv-importer.js} +2 -2
  195. package/core/server/services/members/members-api/members-api.js +14 -14
  196. package/core/server/services/members/members-api/repositories/{MemberRepository.js → member-repository.js} +17 -8
  197. package/core/server/services/members/members-api/services/{MemberBREADService.js → member-bread-service.js} +1 -1
  198. package/core/server/services/members/members-api/services/{PaymentsService.js → payments-service.js} +12 -12
  199. package/core/server/services/members/service.js +4 -4
  200. package/core/server/services/members-events/index.js +3 -3
  201. package/core/server/services/members-events/{LastSeenAtUpdater.js → last-seen-at-updater.js} +2 -2
  202. package/core/server/services/mentions/{BookshelfMentionRepository.js → bookshelf-mention-repository.js} +9 -9
  203. package/core/server/services/mentions/{InMemoryMentionRepository.js → in-memory-mention-repository.js} +4 -4
  204. package/core/server/services/mentions/{MentionController.js → mention-controller.js} +5 -5
  205. package/core/server/services/mentions/{MentionCreatedEvent.js → mention-created-event.js} +1 -1
  206. package/core/server/services/mentions/{Mention.js → mention.js} +1 -1
  207. package/core/server/services/mentions/{MentionsAPI.js → mentions-api.js} +1 -1
  208. package/core/server/services/mentions/{ResourceService.js → resource-service.js} +2 -2
  209. package/core/server/services/mentions/{RoutingService.js → routing-service.js} +2 -2
  210. package/core/server/services/mentions/service.js +11 -11
  211. package/core/server/services/mentions/{WebmentionMetadata.js → webmention-metadata.js} +1 -1
  212. package/core/server/services/mentions-email-report/job.js +1 -1
  213. package/core/server/services/mentions-email-report/{MentionEmailReportJob.js → mention-email-report-job.js} +1 -1
  214. package/core/server/services/mentions-email-report/service.js +2 -2
  215. package/core/server/services/milestones/{BookshelfMilestoneRepository.js → bookshelf-milestone-repository.js} +2 -2
  216. package/core/server/services/milestones/{InMemoryMilestoneRepository.js → in-memory-milestone-repository.js} +2 -2
  217. package/core/server/services/milestones/{Milestone.js → milestone.js} +1 -1
  218. package/core/server/services/milestones/{MilestonesService.js → milestones-service.js} +1 -1
  219. package/core/server/services/milestones/service.js +4 -4
  220. package/core/server/services/newsletters/index.js +2 -2
  221. package/core/server/services/newsletters/{NewslettersService.js → newsletters-service.js} +1 -1
  222. package/core/server/services/notifications/index.js +1 -1
  223. package/core/server/services/oembed/service.js +3 -3
  224. package/core/server/services/offers/application/{OfferMapper.js → offer-mapper.js} +1 -1
  225. package/core/server/services/offers/application/{OffersAPI.js → offers-api.js} +9 -9
  226. package/core/server/services/offers/application/{UniqueChecker.js → unique-checker.js} +2 -2
  227. package/core/server/services/offers/domain/events/{OfferCodeChangeEvent.js → offer-code-change-event.js} +1 -1
  228. package/core/server/services/offers/domain/events/{OfferCreatedEvent.js → offer-created-event.js} +1 -1
  229. package/core/server/services/offers/domain/models/{OfferAmount.js → offer-amount.js} +1 -1
  230. package/core/server/services/offers/domain/models/{OfferCadence.js → offer-cadence.js} +1 -1
  231. package/core/server/services/offers/domain/models/{OfferCode.js → offer-code.js} +1 -1
  232. package/core/server/services/offers/domain/models/{OfferCreatedAt.js → offer-created-at.js} +1 -1
  233. package/core/server/services/offers/domain/models/{OfferCurrency.js → offer-currency.js} +1 -1
  234. package/core/server/services/offers/domain/models/{OfferDescription.js → offer-description.js} +1 -1
  235. package/core/server/services/offers/domain/models/{OfferDuration.js → offer-duration.js} +1 -1
  236. package/core/server/services/offers/domain/models/{OfferName.js → offer-name.js} +1 -1
  237. package/core/server/services/offers/domain/models/{OfferStatus.js → offer-status.js} +1 -1
  238. package/core/server/services/offers/domain/models/{OfferTitle.js → offer-title.js} +1 -1
  239. package/core/server/services/offers/domain/models/{OfferType.js → offer-type.js} +1 -1
  240. package/core/server/services/offers/domain/models/{Offer.js → offer.js} +14 -14
  241. package/core/server/services/offers/domain/models/{StripeCoupon.js → stripe-coupon.js} +1 -1
  242. package/core/server/services/offers/{OfferBookshelfRepository.js → offer-bookshelf-repository.js} +6 -6
  243. package/core/server/services/offers/{OffersModule.js → offers-module.js} +4 -4
  244. package/core/server/services/offers/service.js +3 -3
  245. package/core/server/services/outbox/index.js +2 -2
  246. package/core/server/services/outbox/jobs/outbox-job.js +2 -2
  247. package/core/server/services/posts/posts-service-instance.js +47 -0
  248. package/core/server/services/posts/posts-service.js +572 -45
  249. package/core/server/services/recommendations/index.js +1 -1
  250. package/core/server/services/recommendations/{RecommendationEnablerService.js → recommendation-enabler-service.js} +2 -2
  251. package/core/server/services/recommendations/{RecommendationServiceWrapper.js → recommendation-service-wrapper.js} +2 -2
  252. package/core/server/services/recommendations/service/{BookshelfClickEventRepository.js → bookshelf-click-event-repository.js} +4 -4
  253. package/core/server/services/recommendations/service/{BookshelfClickEventRepository.ts → bookshelf-click-event-repository.ts} +2 -2
  254. package/core/server/services/recommendations/service/{BookshelfRecommendationRepository.js → bookshelf-recommendation-repository.js} +4 -4
  255. package/core/server/services/recommendations/service/{BookshelfRecommendationRepository.ts → bookshelf-recommendation-repository.ts} +3 -3
  256. package/core/server/services/recommendations/service/{BookshelfSubscribeEventRepository.js → bookshelf-subscribe-event-repository.js} +4 -4
  257. package/core/server/services/recommendations/service/{BookshelfSubscribeEventRepository.ts → bookshelf-subscribe-event-repository.ts} +2 -2
  258. package/core/server/services/recommendations/service/{InMemoryRecommendationRepository.js → in-memory-recommendation-repository.js} +2 -2
  259. package/core/server/services/recommendations/service/{InMemoryRecommendationRepository.ts → in-memory-recommendation-repository.ts} +3 -3
  260. package/core/server/services/recommendations/service/{IncomingRecommendationController.js → incoming-recommendation-controller.js} +2 -2
  261. package/core/server/services/recommendations/service/{IncomingRecommendationController.ts → incoming-recommendation-controller.ts} +3 -3
  262. package/core/server/services/recommendations/service/{IncomingRecommendationEmailRenderer.ts → incoming-recommendation-email-renderer.ts} +2 -2
  263. package/core/server/services/recommendations/service/{IncomingRecommendationService.ts → incoming-recommendation-service.ts} +2 -2
  264. package/core/server/services/recommendations/service/index.js +15 -15
  265. package/core/server/services/recommendations/service/index.ts +15 -15
  266. package/core/server/services/recommendations/service/{RecommendationController.js → recommendation-controller.js} +13 -13
  267. package/core/server/services/recommendations/service/{RecommendationController.ts → recommendation-controller.ts} +4 -4
  268. package/core/server/services/recommendations/service/{RecommendationRepository.ts → recommendation-repository.ts} +3 -3
  269. package/core/server/services/recommendations/service/{RecommendationService.js → recommendation-service.js} +6 -6
  270. package/core/server/services/recommendations/service/{RecommendationService.ts → recommendation-service.ts} +8 -8
  271. package/core/server/services/recommendations/service/{Recommendation.js → recommendation.js} +4 -4
  272. package/core/server/services/recommendations/service/{Recommendation.ts → recommendation.ts} +1 -1
  273. package/core/server/services/recommendations/service/{WellknownService.ts → well-known-service.ts} +1 -1
  274. package/core/server/services/route-settings/index.js +4 -4
  275. package/core/server/services/settings/{SettingsBREADService.js → settings-bread-service.js} +1 -1
  276. package/core/server/services/settings/settings-service.js +2 -2
  277. package/core/server/services/settings-helpers/index.js +1 -1
  278. package/core/server/services/settings-helpers/{SettingsHelpers.js → settings-helpers.js} +5 -5
  279. package/core/server/services/slack-notifications/service.js +4 -4
  280. package/core/server/services/slack-notifications/{SlackNotificationsService.js → slack-notifications-service.js} +2 -2
  281. package/core/server/services/slack-notifications/{SlackNotifications.js → slack-notifications.js} +2 -2
  282. package/core/server/services/staff/index.js +1 -1
  283. package/core/server/services/staff/{StaffServiceEmails.js → staff-service-emails.js} +2 -2
  284. package/core/server/services/staff/{StaffService.js → staff-service.js} +2 -2
  285. package/core/server/services/stats/{PostsStatsService.js → posts-stats-service.js} +25 -25
  286. package/core/server/services/stats/{ReferrersStatsService.js → referrers-stats-service.js} +3 -3
  287. package/core/server/services/stats/service.js +1 -1
  288. package/core/server/services/stats/{StatsService.js → stats-service.js} +23 -23
  289. package/core/server/services/stripe/events/index.js +2 -2
  290. package/core/server/services/stripe/service.js +1 -1
  291. package/core/server/services/stripe/services/webhook/{CheckoutSessionEventService.js → checkout-session-event-service.js} +2 -2
  292. package/core/server/services/stripe/{StripeMigrations.js → stripe-migrations.js} +1 -1
  293. package/core/server/services/stripe/{StripeService.js → stripe-service.js} +8 -8
  294. package/core/server/services/stripe/{WebhookController.js → webhook-controller.js} +4 -4
  295. package/core/server/services/stripe/{WebhookManager.js → webhook-manager.js} +5 -5
  296. package/core/server/services/themes/storage.js +1 -1
  297. package/core/server/services/tiers/{InMemoryTierRepository.js → in-memory-tier-repository.js} +1 -1
  298. package/core/server/services/tiers/service.js +2 -2
  299. package/core/server/services/tiers/{TierActivatedEvent.js → tier-activated-event.js} +1 -1
  300. package/core/server/services/tiers/{TierArchivedEvent.js → tier-archived-event.js} +1 -1
  301. package/core/server/services/tiers/{TierCreatedEvent.js → tier-created-event.js} +1 -1
  302. package/core/server/services/tiers/{TierNameChangeEvent.js → tier-name-change-event.js} +1 -1
  303. package/core/server/services/tiers/{TierPriceChangeEvent.js → tier-price-change-event.js} +1 -1
  304. package/core/server/services/tiers/{TierRepository.js → tier-repository.js} +7 -7
  305. package/core/server/services/tiers/{Tier.js → tier.js} +5 -5
  306. package/core/server/services/tiers/{TiersAPI.js → tiers-api.js} +1 -1
  307. package/core/server/services/tinybird/index.js +1 -1
  308. package/core/server/services/tinybird/{TinybirdServiceWrapper.js → tinybird-service-wrapper.js} +2 -2
  309. package/core/server/services/update-check/index.js +1 -1
  310. package/core/server/services/url/index.js +2 -2
  311. package/core/server/services/url/{Resources.js → resources.js} +1 -1
  312. package/core/server/services/url/{UrlGenerator.js → url-generator.js} +1 -1
  313. package/core/server/services/url/{UrlService.js → url-service.js} +4 -4
  314. package/core/server/services/url/{Urls.js → urls.js} +1 -1
  315. package/core/server/services/webhooks/listen.js +1 -1
  316. package/core/shared/labs.js +2 -1
  317. package/package.json +3 -3
  318. package/tsconfig.tsbuildinfo +1 -1
  319. package/components/tryghost-i18n-6.11.0.tgz +0 -0
  320. package/core/built/admin/assets/index-Cr_YX9yU.js +0 -1
  321. package/core/built/admin/assets/stats/index-BBCJ2EZo.mjs +0 -733
  322. package/core/server/services/posts/PostsService.js +0 -574
  323. /package/core/server/{GhostServer.js → ghost-server.js} +0 -0
  324. /package/core/server/services/activitypub/{ActivityPubService.js → activity-pub-service.js} +0 -0
  325. /package/core/server/services/adapter-manager/{AdapterManager.js → adapter-manager.js} +0 -0
  326. /package/core/server/services/announcement-bar-service/{AnnouncementVisibilityValues.js → announcement-visibility-values.js} +0 -0
  327. /package/core/server/services/audience-feedback/{AudienceFeedbackService.js → audience-feedback-service.js} +0 -0
  328. /package/core/server/services/audience-feedback/{FeedbackRepository.js → feedback-repository.js} +0 -0
  329. /package/core/server/services/audience-feedback/{Feedback.js → feedback.js} +0 -0
  330. /package/core/server/services/auth/session/{SessionStore.js → session-store.js} +0 -0
  331. /package/core/server/services/comments/{CommentsServiceEmailRenderer.js → comments-service-email-renderer.js} +0 -0
  332. /package/core/server/services/comments/{CommentsStatsService.js → comments-stats-service.js} +0 -0
  333. /package/core/server/services/custom-redirects/{CustomRedirectsAPI.js → custom-redirects-api.js} +0 -0
  334. /package/core/server/services/donations/{DonationBookshelfRepository.js → donation-bookshelf-repository.js} +0 -0
  335. /package/core/server/services/donations/{DonationPaymentEvent.js → donation-payment-event.js} +0 -0
  336. /package/core/server/services/donations/{DonationPaymentEvent.ts → donation-payment-event.ts} +0 -0
  337. /package/core/server/services/email-address/{EmailAddressParser.js → email-address-parser.js} +0 -0
  338. /package/core/server/services/email-address/{EmailAddressParser.js.d.ts → email-address-parser.js.d.ts} +0 -0
  339. /package/core/server/services/email-analytics/{EventProcessingResult.js → event-processing-result.js} +0 -0
  340. /package/core/server/services/email-analytics/events/{StartEmailAnalyticsJobEvent.js → start-email-analytics-job-event.js} +0 -0
  341. /package/core/server/services/email-service/{DomainWarmingService.js → domain-warming-service.js} +0 -0
  342. /package/core/server/services/email-service/{DomainWarmingService.ts → domain-warming-service.ts} +0 -0
  343. /package/core/server/services/email-service/{EmailBodyCache.js → email-body-cache.js} +0 -0
  344. /package/core/server/services/email-service/{EmailController.js → email-controller.js} +0 -0
  345. /package/core/server/services/email-service/{EmailSegmenter.js → email-segmenter.js} +0 -0
  346. /package/core/server/services/email-service/events/{EmailBouncedEvent.js → email-bounced-event.js} +0 -0
  347. /package/core/server/services/email-service/events/{EmailDeliveredEvent.js → email-delivered-event.js} +0 -0
  348. /package/core/server/services/email-service/events/{EmailOpenedEvent.js → email-opened-event.js} +0 -0
  349. /package/core/server/services/email-service/events/{EmailTemporaryBouncedEvent.js → email-temporary-bounced-event.js} +0 -0
  350. /package/core/server/services/email-service/events/{EmailUnsubscribedEvent.js → email-unsubscribed-event.js} +0 -0
  351. /package/core/server/services/email-service/events/{SpamComplaintEvent.js → spam-complaint-event.js} +0 -0
  352. /package/core/server/services/email-suppression-list/{EmailSuppressionList.js → email-suppression-list.js} +0 -0
  353. /package/core/server/services/explore/{ExploreService.js → explore-service.js} +0 -0
  354. /package/core/server/services/explore-ping/{ExplorePingService.js → explore-ping-service.js} +0 -0
  355. /package/core/server/services/frontend-data-service/{FrontendDataService.js → front-end-data-service.js} +0 -0
  356. /package/core/server/services/identity-tokens/{IdentityTokenService.js → identity-token-service.js} +0 -0
  357. /package/core/server/services/identity-tokens/{IdentityTokenService.ts → identity-token-service.ts} +0 -0
  358. /package/core/server/services/invites/{Invites.js → invites.js} +0 -0
  359. /package/core/server/services/lib/{DynamicRedirectManager.js → dynamic-redirect-manager.js} +0 -0
  360. /package/core/server/services/lib/{EmailContentGenerator.js → email-content-generator.js} +0 -0
  361. /package/core/server/services/lib/{InMemoryRepository.js → in-memory-repository.js} +0 -0
  362. /package/core/server/services/lib/{InMemoryRepository.ts → in-memory-repository.ts} +0 -0
  363. /package/core/server/services/lib/magic-link/{MagicLink.js → magic-link.js} +0 -0
  364. /package/core/server/services/lib/{MailgunClient.js → mailgun-client.js} +0 -0
  365. /package/core/server/services/link-redirection/{LinkRedirect.js → link-redirect.js} +0 -0
  366. /package/core/server/services/link-tracking/{ClickEvent.js → click-event.js} +0 -0
  367. /package/core/server/services/link-tracking/{FullPostLink.js → full-post-link.js} +0 -0
  368. /package/core/server/services/link-tracking/{PostLink.js → post-link.js} +0 -0
  369. /package/core/server/services/media-inliner/{ExternalMediaInliner.js → external-media-inliner.js} +0 -0
  370. /package/core/server/services/member-attribution/{OutboundLinkTagger.js → outbound-link-tagger.js} +0 -0
  371. /package/core/server/services/member-attribution/{UrlHistory.js → url-history.js} +0 -0
  372. /package/core/server/services/member-welcome-emails/{MemberWelcomeEmailRenderer.js → member-welcome-email-renderer.js} +0 -0
  373. /package/core/server/services/members/importer/{MembersCSVImporterStripeUtils.js → members-csv-importer-stripe-utils.js} +0 -0
  374. /package/core/server/services/members/members-api/controllers/{MemberController.js → member-controller.js} +0 -0
  375. /package/core/server/services/members/members-api/controllers/{RouterController.js → router-controller.js} +0 -0
  376. /package/core/server/services/members/members-api/controllers/{WellKnownController.js → well-known-controller.js} +0 -0
  377. /package/core/server/services/members/members-api/repositories/{EventRepository.js → event-repository.js} +0 -0
  378. /package/core/server/services/members/members-api/repositories/{ProductRepository.js → product-repository.js} +0 -0
  379. /package/core/server/services/members/members-api/services/{GeolocationService.js → geolocation-service.js} +0 -0
  380. /package/core/server/services/members/members-api/services/{TokenService.js → token-service.js} +0 -0
  381. /package/core/server/services/members/{MembersConfigProvider.js → members-config-provider.js} +0 -0
  382. /package/core/server/services/members/{RequestIntegrityTokenProvider.js → request-integrity-token-provider.js} +0 -0
  383. /package/core/server/services/members/{SingleUseTokenProvider.js → single-use-token-provider.js} +0 -0
  384. /package/core/server/services/members/stats/{MembersStats.js → members-stats.js} +0 -0
  385. /package/core/server/services/members-events/{EventStorage.js → event-storage.js} +0 -0
  386. /package/core/server/services/members-events/{LastSeenAtCache.js → last-seen-at-cache.js} +0 -0
  387. /package/core/server/services/mentions/{MentionDiscoveryService.js → mention-discovery-service.js} +0 -0
  388. /package/core/server/services/mentions/{MentionSendingService.js → mention-sending-service.js} +0 -0
  389. /package/core/server/services/mentions-email-report/{StartMentionEmailReportJob.js → start-mention-email-report-job.js} +0 -0
  390. /package/core/server/services/milestones/{MilestoneCreatedEvent.js → milestone-created-event.js} +0 -0
  391. /package/core/server/services/milestones/{MilestoneQueries.js → milestone-queries.js} +0 -0
  392. /package/core/server/services/notifications/{Notifications.js → notifications.js} +0 -0
  393. /package/core/server/services/oembed/{NFTOEmbedProvider.js → nft-oembed-provider.js} +0 -0
  394. /package/core/server/services/oembed/{OEmbedService.js → oembed-service.js} +0 -0
  395. /package/core/server/services/oembed/{TwitterOEmbedProvider.js → twitter-oembed-provider.js} +0 -0
  396. /package/core/server/services/offers/domain/models/shared/{ValueObject.js → value-object.js} +0 -0
  397. /package/core/server/services/outbox/events/{StartOutboxProcessingEvent.js → start-outbox-processing-event.js} +0 -0
  398. /package/core/server/services/posts/{PostsExporter.js → posts-exporter.js} +0 -0
  399. /package/core/server/services/posts/stats/{PostStats.js → post-stats.js} +0 -0
  400. /package/core/server/services/recommendations/service/{BookshelfRepository.js → bookshelf-repository.js} +0 -0
  401. /package/core/server/services/recommendations/service/{BookshelfRepository.ts → bookshelf-repository.ts} +0 -0
  402. /package/core/server/services/recommendations/service/{ClickEvent.js → click-event.js} +0 -0
  403. /package/core/server/services/recommendations/service/{ClickEvent.ts → click-event.ts} +0 -0
  404. /package/core/server/services/recommendations/service/{IncomingRecommendationEmailRenderer.js → incoming-recommendation-email-renderer.js} +0 -0
  405. /package/core/server/services/recommendations/service/{IncomingRecommendationService.js → incoming-recommendation-service.js} +0 -0
  406. /package/core/server/services/recommendations/service/{RecommendationMetadataService.js → recommendation-metadata-service.js} +0 -0
  407. /package/core/server/services/recommendations/service/{RecommendationMetadataService.ts → recommendation-metadata-service.ts} +0 -0
  408. /package/core/server/services/recommendations/service/{RecommendationRepository.js → recommendation-repository.js} +0 -0
  409. /package/core/server/services/recommendations/service/{SubscribeEvent.js → subscribe-event.js} +0 -0
  410. /package/core/server/services/recommendations/service/{SubscribeEvent.ts → subscribe-event.ts} +0 -0
  411. /package/core/server/services/recommendations/service/{UnsafeData.js → unsafe-data.js} +0 -0
  412. /package/core/server/services/recommendations/service/{UnsafeData.ts → unsafe-data.ts} +0 -0
  413. /package/core/server/services/recommendations/service/{WellknownService.js → well-known-service.js} +0 -0
  414. /package/core/server/services/route-settings/{DefaultSettingsManager.js → default-settings-manager.js} +0 -0
  415. /package/core/server/services/route-settings/{RouteSettings.js → route-settings.js} +0 -0
  416. /package/core/server/services/route-settings/{SettingsLoader.js → settings-loader.js} +0 -0
  417. /package/core/server/services/route-settings/{SettingsPathManager.js → settings-path-manager.js} +0 -0
  418. /package/core/server/services/stats/{ContentStatsService.js → content-stats-service.js} +0 -0
  419. /package/core/server/services/stats/{MembersStatsService.js → members-stats-service.js} +0 -0
  420. /package/core/server/services/stats/{MrrStatsService.js → mrr-stats-service.js} +0 -0
  421. /package/core/server/services/stats/{SubscriptionStatsService.js → subscription-stats-service.js} +0 -0
  422. /package/core/server/services/stripe/events/{StripeLiveDisabledEvent.js → stripe-live-disabled-event.js} +0 -0
  423. /package/core/server/services/stripe/events/{StripeLiveEnabledEvent.js → stripe-live-enabled-event.js} +0 -0
  424. /package/core/server/services/stripe/services/webhook/{InvoiceEventService.js → invoice-event-service.js} +0 -0
  425. /package/core/server/services/stripe/services/webhook/{SubscriptionEventService.js → subscription-event-service.js} +0 -0
  426. /package/core/server/services/stripe/{StripeAPI.js → stripe-api.js} +0 -0
  427. /package/core/server/services/themes/{ThemeStorage.js → theme-storage.js} +0 -0
  428. /package/core/server/services/tinybird/{TinybirdService.js → tinybird-service.js} +0 -0
  429. /package/core/server/services/update-check/{UpdateCheckService.js → update-check-service.js} +0 -0
  430. /package/core/server/services/url/{LocalFileCache.js → local-file-cache.js} +0 -0
  431. /package/core/server/services/url/{Queue.js → queue.js} +0 -0
  432. /package/core/server/services/url/{Resource.js → resource.js} +0 -0
  433. /package/core/server/services/{Users.js → users.js} +0 -0
  434. /package/core/server/services/{VerificationTrigger.js → verification-trigger.js} +0 -0
  435. /package/core/server/services/webhooks/{WebhookTrigger.js → webhook-trigger.js} +0 -0
@@ -1,733 +0,0 @@
1
- import { a as me, j as e, u as X, b as le, d as ie, O as Te, t as Se, n as J, g as d, i as K, T as $, V as ee, k as G, o as ue, m as Me, p as te, R as be, e as fe } from "./index-DbGvSTMe.mjs";
2
- import { E as he, aP as Pe, B as xe, aO as se, j as Be, au as Ee, av as Ye, aw as Oe, ax as ae, k as pe, aQ as Ve, aR as Fe, aS as Ge, aT as Re, aU as Ae, aV as $e, aW as je, aX as ze, aY as Le, m as ne, S as _e, F as Ie, aD as Ke, aZ as Ue, y as We, z as He, N as Qe, D as qe, A as Xe, a as ge, e as ve, b as Je, c as Ze, d as es, J as ss } from "./stats-CJ7fhUyT.mjs";
3
- import { T as ce, a as de, K as re, c as R, d as as, b as U, e as ye } from "./tabs-CkbxYgOE.mjs";
4
- import { B as rs, T as q, a as S, b as N, c as ts, d as we, e as Ce, f as A, S as W } from "./sort-button-D76rcldr.mjs";
5
- import { k as ns, S as ls, a as is, b as os, c as cs, d as ds, f as ms, g as us, C as I, h as hs, l as xs, j as bs } from "./url-helpers-DICtqCrE.mjs";
6
- import { g as oe, u as fs } from "./use-growth-stats-DzO7zEy4.mjs";
7
- import { g as ps } from "./audience-select-DNAWmT7R.mjs";
8
- const ke = ({ className: o }) => {
9
- const p = me();
10
- return /* @__PURE__ */ e.jsx(
11
- he,
12
- {
13
- actions: /* @__PURE__ */ e.jsx(xe, { variant: "outline", onClick: () => p("/settings/analytics", { crossApp: !0 }), children: "Open settings" }),
14
- className: o,
15
- description: "Enable member source tracking in settings to see which content drives member growth.",
16
- title: "Member sources have been disabled",
17
- children: /* @__PURE__ */ e.jsx(Pe, {})
18
- }
19
- );
20
- }, js = ({ chartData: o, subscriptionData: p, totals: T, initialTab: u = "total-members", currencySymbol: j, isLoading: f }) => {
21
- const [a, x] = X(u), [m, z] = X("total"), { range: r } = le(), { appSettings: b } = ie(), H = me(), [M] = Te();
22
- Se(() => {
23
- x(u);
24
- }, [u]);
25
- const w = (s) => {
26
- x(s);
27
- const n = new URLSearchParams(M);
28
- n.set("tab", s), H(`?${n.toString()}`, { replace: !0 });
29
- }, { totalMembers: P, freeMembers: O, paidMembers: V, mrr: B, percentChanges: C, directions: t } = T, _ = (s, n) => {
30
- if (n === 1) {
31
- const k = $().format("YYYY-MM-DD"), D = s.find((Z) => Z.date === k);
32
- return [{
33
- date: k,
34
- signups: (D == null ? void 0 : D.signups) || 0,
35
- cancellations: (D == null ? void 0 : D.cancellations) || 0
36
- }];
37
- }
38
- const { startDate: i, endDate: h } = ue(n), c = $(h).diff($(i), "days"), g = ze(n, c, "sum"), F = new Map(s.map((k) => [k.date, k])), L = [], Q = $(i), De = $(h);
39
- for (; Q.isSameOrBefore(De); ) {
40
- let k, D;
41
- switch (g) {
42
- case "weekly":
43
- k = Q.startOf("week").format("YYYY-MM-DD"), D = "week";
44
- break;
45
- case "monthly":
46
- k = Q.startOf("month").format("YYYY-MM-DD"), D = "month";
47
- break;
48
- default:
49
- k = Q.format("YYYY-MM-DD"), D = "day";
50
- }
51
- const Z = F.get(k);
52
- Z ? L.push(Z) : L.push({
53
- date: k,
54
- signups: 0,
55
- cancellations: 0
56
- }), Q.add(1, D);
57
- }
58
- return L;
59
- }, v = J(() => {
60
- if (!o || o.length === 0)
61
- return [];
62
- let s = [], n = "value";
63
- switch (a) {
64
- case "free-members":
65
- n = "free";
66
- break;
67
- case "paid-members":
68
- n = "paid";
69
- break;
70
- case "mrr": {
71
- n = "mrr";
72
- break;
73
- }
74
- default:
75
- n = "value";
76
- }
77
- s = se(o, r, n, "exact");
78
- let i = [];
79
- switch (a) {
80
- case "free-members":
81
- i = s.map((h) => ({
82
- ...h,
83
- value: h.free,
84
- formattedValue: d(h.free),
85
- label: "Free members"
86
- }));
87
- break;
88
- case "paid-members":
89
- i = s.map((h) => ({
90
- ...h,
91
- value: h.paid,
92
- formattedValue: d(h.paid),
93
- label: "Paid members"
94
- }));
95
- break;
96
- case "mrr":
97
- i = s.map((h) => ({
98
- ...h,
99
- value: K(h.mrr),
100
- formattedValue: `${j}${d(K(h.mrr))}`,
101
- label: "MRR"
102
- }));
103
- break;
104
- default:
105
- i = s.map((h) => {
106
- const c = h.free + h.paid;
107
- return {
108
- ...h,
109
- value: c,
110
- formattedValue: d(c),
111
- label: "Total members"
112
- };
113
- });
114
- }
115
- return i;
116
- }, [a, o, r, j]), y = {
117
- "total-members": {
118
- color: "hsl(var(--chart-darkblue))"
119
- },
120
- "free-members": {
121
- color: "hsl(var(--chart-blue))"
122
- },
123
- "paid-members": {
124
- color: "hsl(var(--chart-purple))"
125
- },
126
- mrr: {
127
- color: "hsl(var(--chart-teal))"
128
- }
129
- }, E = J(() => {
130
- if (a !== "paid-members")
131
- return [];
132
- if (p && p.length > 0) {
133
- if (r === 1) {
134
- const c = $().format("YYYY-MM-DD"), g = p.find((F) => F.date === c);
135
- return [{
136
- date: ee(c, r),
137
- new: (g == null ? void 0 : g.signups) || 0,
138
- cancelled: -((g == null ? void 0 : g.cancellations) || 0)
139
- // Negative for the stacked bar chart
140
- }];
141
- }
142
- const s = se(p, r, "signups", "sum"), n = se(p, r, "cancellations", "sum"), i = s.map((c) => {
143
- var g;
144
- return {
145
- date: c.date,
146
- signups: c.signups || 0,
147
- cancellations: ((g = n.find((F) => F.date === c.date)) == null ? void 0 : g.cancellations) || 0
148
- };
149
- });
150
- return n.forEach((c) => {
151
- i.find((g) => g.date === c.date) || i.push({
152
- date: c.date,
153
- signups: 0,
154
- cancellations: c.cancellations || 0
155
- });
156
- }), i.sort((c, g) => new Date(c.date).getTime() - new Date(g.date).getTime()), _(i, r).map((c) => ({
157
- date: ee(c.date, r),
158
- new: c.signups || 0,
159
- cancelled: -(c.cancellations || 0)
160
- // Negative for the stacked bar chart
161
- }));
162
- } else {
163
- if (!o || o.length === 0)
164
- return [];
165
- if (r === 1) {
166
- const n = $().format("YYYY-MM-DD"), i = o.find((h) => h.date === n);
167
- return [{
168
- date: ee(n, r),
169
- new: (i == null ? void 0 : i.paid_subscribed) || 0,
170
- cancelled: -((i == null ? void 0 : i.paid_canceled) || 0)
171
- // Negative for the stacked bar chart
172
- }];
173
- }
174
- return se(o, r, "paid", "exact").map((n) => ({
175
- date: ee(n.date, r),
176
- new: n.paid_subscribed || 0,
177
- cancelled: -(n.paid_canceled || 0)
178
- // Negative for the stacked bar chart
179
- }));
180
- }
181
- }, [a, o, p, r]), Y = {
182
- new: {
183
- label: "New",
184
- color: "hsl(var(--chart-teal))"
185
- },
186
- cancelled: {
187
- label: "Cancelled",
188
- color: "hsl(var(--chart-rose))"
189
- }
190
- };
191
- if (f)
192
- return /* @__PURE__ */ e.jsx("div", { className: "-mb-6 flex h-[calc(16vw+132px)] w-full items-start justify-center", children: /* @__PURE__ */ e.jsx(Be, {}) });
193
- const l = "-mb-3 h-[16vw] max-h-[320px] w-full min-h-[180px]";
194
- return /* @__PURE__ */ e.jsxs(ce, { defaultValue: u, variant: "kpis", children: [
195
- /* @__PURE__ */ e.jsxs(de, { className: `-mx-6 ${b != null && b.paidMembersEnabled ? "hidden grid-cols-4 lg:!visible lg:!grid" : "grid grid-cols-4"}`, children: [
196
- /* @__PURE__ */ e.jsx(re, { className: b != null && b.paidMembersEnabled ? "" : "cursor-auto after:hidden", value: "total-members", onClick: () => {
197
- b != null && b.paidMembersEnabled && w("total-members");
198
- }, children: /* @__PURE__ */ e.jsx(
199
- R,
200
- {
201
- color: "hsl(var(--chart-darkblue))",
202
- diffDirection: r === G.allTime.value ? "hidden" : t.total,
203
- diffValue: C.total,
204
- label: "Total members",
205
- value: d(P)
206
- }
207
- ) }),
208
- (b == null ? void 0 : b.paidMembersEnabled) && /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
209
- /* @__PURE__ */ e.jsx(re, { value: "free-members", onClick: () => {
210
- w("free-members");
211
- }, children: /* @__PURE__ */ e.jsx(
212
- R,
213
- {
214
- color: "hsl(var(--chart-blue))",
215
- diffDirection: r === G.allTime.value ? "hidden" : t.free,
216
- diffValue: C.free,
217
- label: "Free members",
218
- value: d(O)
219
- }
220
- ) }),
221
- /* @__PURE__ */ e.jsx(re, { value: "paid-members", onClick: () => {
222
- w("paid-members");
223
- }, children: /* @__PURE__ */ e.jsx(
224
- R,
225
- {
226
- color: "hsl(var(--chart-purple))",
227
- diffDirection: r === G.allTime.value ? "hidden" : t.paid,
228
- diffValue: C.paid,
229
- label: "Paid members",
230
- value: d(V)
231
- }
232
- ) }),
233
- /* @__PURE__ */ e.jsx(re, { value: "mrr", onClick: () => {
234
- w("mrr");
235
- }, children: /* @__PURE__ */ e.jsx(
236
- R,
237
- {
238
- color: "hsl(var(--chart-teal))",
239
- diffDirection: r === G.allTime.value ? "hidden" : t.mrr,
240
- diffValue: C.mrr,
241
- label: "MRR",
242
- value: `${j}${d(K(B))}`
243
- }
244
- ) })
245
- ] })
246
- ] }),
247
- (b == null ? void 0 : b.paidMembersEnabled) && /* @__PURE__ */ e.jsxs(Ee, { children: [
248
- /* @__PURE__ */ e.jsx(Ye, { className: "lg:hidden", asChild: !0, children: /* @__PURE__ */ e.jsxs(as, { children: [
249
- a === "total-members" && /* @__PURE__ */ e.jsx(
250
- R,
251
- {
252
- color: "hsl(var(--chart-darkblue))",
253
- diffDirection: r === G.allTime.value ? "hidden" : t.total,
254
- diffValue: C.total,
255
- label: "Total members",
256
- value: d(P)
257
- }
258
- ),
259
- a === "free-members" && /* @__PURE__ */ e.jsx(
260
- R,
261
- {
262
- color: "hsl(var(--chart-blue))",
263
- diffDirection: r === G.allTime.value ? "hidden" : t.free,
264
- diffValue: C.free,
265
- label: "Free members",
266
- value: d(O)
267
- }
268
- ),
269
- a === "paid-members" && /* @__PURE__ */ e.jsx(
270
- R,
271
- {
272
- color: "hsl(var(--chart-purple))",
273
- diffDirection: r === G.allTime.value ? "hidden" : t.paid,
274
- diffValue: C.paid,
275
- label: "Paid members",
276
- value: d(V)
277
- }
278
- ),
279
- a === "mrr" && /* @__PURE__ */ e.jsx(
280
- R,
281
- {
282
- color: "hsl(var(--chart-teal))",
283
- diffDirection: r === G.allTime.value ? "hidden" : t.mrr,
284
- diffValue: C.mrr,
285
- label: "MRR",
286
- value: `${j}${d(K(B))}`
287
- }
288
- )
289
- ] }) }),
290
- /* @__PURE__ */ e.jsxs(Oe, { align: "end", className: "w-56", children: [
291
- /* @__PURE__ */ e.jsx(ae, { onClick: () => w("total-members"), children: "Total members" }),
292
- /* @__PURE__ */ e.jsx(ae, { onClick: () => w("free-members"), children: "Free members" }),
293
- /* @__PURE__ */ e.jsx(ae, { onClick: () => w("paid-members"), children: "Paid members" }),
294
- /* @__PURE__ */ e.jsx(ae, { onClick: () => w("mrr"), children: "MRR" })
295
- ] })
296
- ] }),
297
- /* @__PURE__ */ e.jsx("div", { className: "my-4 [&_.recharts-cartesian-axis-tick-value]:fill-gray-500", children: a === "paid-members" ? /* @__PURE__ */ e.jsxs(
298
- ce,
299
- {
300
- defaultValue: m,
301
- variant: "button-sm",
302
- onValueChange: (s) => {
303
- z(s);
304
- },
305
- children: [
306
- /* @__PURE__ */ e.jsx("div", { className: "mb-4 mt-2 flex w-full items-center justify-start", children: /* @__PURE__ */ e.jsxs(de, { className: "flex items-center", children: [
307
- /* @__PURE__ */ e.jsx(U, { value: "total", children: "Total" }),
308
- /* @__PURE__ */ e.jsx(U, { value: "change", children: "Change" })
309
- ] }) }),
310
- /* @__PURE__ */ e.jsx(ye, { value: "total", children: /* @__PURE__ */ e.jsx(
311
- pe,
312
- {
313
- className: l,
314
- color: y[a].color,
315
- data: v,
316
- dataFormatter: d,
317
- id: "paid-members",
318
- range: r
319
- }
320
- ) }),
321
- /* @__PURE__ */ e.jsxs(ye, { value: "change", children: [
322
- /* @__PURE__ */ e.jsx(Ve, { className: "mt-6 aspect-auto h-[200px] w-full md:h-[220px] xl:h-[260px]", config: Y, children: /* @__PURE__ */ e.jsxs(
323
- rs,
324
- {
325
- data: E,
326
- stackOffset: "sign",
327
- children: [
328
- /* @__PURE__ */ e.jsx("defs", { children: /* @__PURE__ */ e.jsxs("linearGradient", { id: "tealGradient", x1: "0", x2: "0", y1: "0", y2: "1", children: [
329
- /* @__PURE__ */ e.jsx("stop", { offset: "0%", stopColor: "var(--color-new)", stopOpacity: 0.8 }),
330
- /* @__PURE__ */ e.jsx("stop", { offset: "100%", stopColor: "var(--color-new)", stopOpacity: 0.6 })
331
- ] }) }),
332
- /* @__PURE__ */ e.jsx("defs", { children: /* @__PURE__ */ e.jsxs("linearGradient", { id: "roseGradient", x1: "0", x2: "0", y1: "0", y2: "1", children: [
333
- /* @__PURE__ */ e.jsx("stop", { offset: "0%", stopColor: "var(--color-cancelled)", stopOpacity: 0.6 }),
334
- /* @__PURE__ */ e.jsx("stop", { offset: "100%", stopColor: "var(--color-cancelled)", stopOpacity: 0.8 })
335
- ] }) }),
336
- /* @__PURE__ */ e.jsx(Fe, { vertical: !1 }),
337
- /* @__PURE__ */ e.jsx(
338
- Ge,
339
- {
340
- axisLine: !1,
341
- dataKey: "date",
342
- tickFormatter: () => "",
343
- tickLine: !1,
344
- tickMargin: 10
345
- }
346
- ),
347
- /* @__PURE__ */ e.jsx(
348
- Re,
349
- {
350
- axisLine: !1,
351
- tickFormatter: (s) => s < 0 ? d(s * -1) : d(s),
352
- tickLine: !1
353
- }
354
- ),
355
- /* @__PURE__ */ e.jsx(
356
- Ae,
357
- {
358
- content: /* @__PURE__ */ e.jsx(
359
- $e,
360
- {
361
- className: "!min-w-[120px] px-3 py-2",
362
- formatter: (s, n, i, h) => {
363
- var F, L;
364
- const c = Number(s);
365
- let g = "0";
366
- return c === 0 ? g = "0" : g = c < 0 ? d(c * -1) : d(c), /* @__PURE__ */ e.jsxs("div", { className: "flex w-full flex-col", children: [
367
- h === 0 && /* @__PURE__ */ e.jsx("div", { className: "mb-1 text-sm font-medium text-foreground", children: (F = i == null ? void 0 : i.payload) == null ? void 0 : F.date }),
368
- /* @__PURE__ */ e.jsxs("div", { className: "flex w-full items-center justify-between gap-4", children: [
369
- /* @__PURE__ */ e.jsxs("div", { className: "flex items-center gap-1", children: [
370
- /* @__PURE__ */ e.jsx(
371
- "div",
372
- {
373
- className: "size-2 shrink-0 rounded-full bg-[var(--color-bg)] opacity-50",
374
- style: {
375
- "--color-bg": `var(--color-${n})`
376
- }
377
- }
378
- ),
379
- /* @__PURE__ */ e.jsx("span", { className: "text-sm text-muted-foreground", children: ((L = Y[n]) == null ? void 0 : L.label) || n })
380
- ] }),
381
- /* @__PURE__ */ e.jsx("div", { className: "ml-auto flex items-baseline gap-0.5 font-mono font-medium tabular-nums text-foreground", children: g })
382
- ] })
383
- ] });
384
- },
385
- hideLabel: !0
386
- }
387
- ),
388
- cursor: !1,
389
- isAnimationActive: !1,
390
- position: { y: 10 }
391
- }
392
- ),
393
- /* @__PURE__ */ e.jsx(
394
- je,
395
- {
396
- activeBar: { fillOpacity: 1 },
397
- dataKey: "new",
398
- fill: "url(#tealGradient)",
399
- fillOpacity: 0.75,
400
- maxBarSize: 32,
401
- minPointSize: 3,
402
- radius: [4, 4, 0, 0],
403
- stackId: "a"
404
- }
405
- ),
406
- /* @__PURE__ */ e.jsx(
407
- je,
408
- {
409
- activeBar: { fillOpacity: 1 },
410
- dataKey: "cancelled",
411
- fill: "url(#roseGradient)",
412
- fillOpacity: 0.75,
413
- maxBarSize: 32,
414
- radius: [4, 4, 0, 0],
415
- stackId: "a"
416
- }
417
- )
418
- ]
419
- }
420
- ) }),
421
- /* @__PURE__ */ e.jsxs("div", { className: "flex items-center justify-center gap-6 text-sm text-muted-foreground", children: [
422
- /* @__PURE__ */ e.jsxs("div", { className: "flex items-center gap-1", children: [
423
- /* @__PURE__ */ e.jsx(
424
- "span",
425
- {
426
- className: "size-2 rounded-full opacity-50",
427
- style: {
428
- backgroundColor: Y.new.color
429
- }
430
- }
431
- ),
432
- "New"
433
- ] }),
434
- /* @__PURE__ */ e.jsxs("div", { className: "flex items-center gap-1", children: [
435
- /* @__PURE__ */ e.jsx(
436
- "span",
437
- {
438
- className: "size-2 rounded-full opacity-50",
439
- style: {
440
- backgroundColor: Y.cancelled.color
441
- }
442
- }
443
- ),
444
- "Cancelled"
445
- ] })
446
- ] })
447
- ] })
448
- ]
449
- }
450
- ) : /* @__PURE__ */ e.jsx(
451
- pe,
452
- {
453
- className: l,
454
- color: y[a].color,
455
- data: v,
456
- dataFormatter: a === "mrr" ? (s) => `${j}${d(s)}` : d,
457
- id: "mrr",
458
- range: r
459
- }
460
- ) })
461
- ] });
462
- }, gs = Me({
463
- dataType: "TopSourcesGrowthResponseType",
464
- path: "/stats/top-sources-growth"
465
- }), vs = (o, p = "signups desc", T = 50) => {
466
- const { audience: u } = le(), { startDate: j, endDate: f, timezone: a } = ue(o), x = {
467
- date_from: te(j),
468
- date_to: te(f),
469
- member_status: ps(u),
470
- order: p,
471
- limit: T.toString()
472
- };
473
- return a && (x.timezone = a), gs({ searchParams: x });
474
- }, Ne = ({ data: o, currencySymbol: p, limit: T, defaultSourceIconUrl: u }) => {
475
- const j = T ? o.slice(0, T) : o, { appSettings: f } = ie();
476
- return /* @__PURE__ */ e.jsx(q, { children: j.map((a) => /* @__PURE__ */ e.jsxs(S, { className: "last:border-none", children: [
477
- /* @__PURE__ */ e.jsx(N, { className: "font-medium", children: /* @__PURE__ */ e.jsxs("div", { className: "flex items-center gap-2", children: [
478
- /* @__PURE__ */ e.jsx(
479
- us,
480
- {
481
- defaultSourceIconUrl: u,
482
- displayName: a.displayName,
483
- iconSrc: a.iconSrc
484
- }
485
- ),
486
- a.linkUrl ? /* @__PURE__ */ e.jsx(
487
- "a",
488
- {
489
- className: "hover:underline",
490
- href: a.linkUrl,
491
- rel: "noreferrer",
492
- target: "_blank",
493
- children: a.displayName
494
- }
495
- ) : /* @__PURE__ */ e.jsx("span", { children: a.displayName })
496
- ] }) }),
497
- /* @__PURE__ */ e.jsxs(N, { className: "text-right font-mono text-sm", children: [
498
- "+",
499
- d(a.free_members)
500
- ] }),
501
- (f == null ? void 0 : f.paidMembersEnabled) && /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
502
- /* @__PURE__ */ e.jsxs(N, { className: "text-right font-mono text-sm", children: [
503
- "+",
504
- d(a.paid_members)
505
- ] }),
506
- /* @__PURE__ */ e.jsxs(N, { className: "text-right font-mono text-sm", children: [
507
- "+",
508
- p,
509
- d(K(a.mrr))
510
- ] })
511
- ] })
512
- ] }, a.source)) });
513
- }, ys = ({
514
- range: o,
515
- limit: p = 20,
516
- showViewAll: T = !1,
517
- sortBy: u,
518
- setSortBy: j
519
- }) => {
520
- const { data: f } = le(), { data: a } = Le(), { appSettings: x } = ie(), [m, z] = X("free_members desc"), r = u || m, b = j || z, H = r.replace("free_members", "signups").replace("paid_members", "paid_conversions"), { data: M, isLoading: w } = vs(o, H, p), P = f == null ? void 0 : f.url, O = "https://www.google.com/s2/favicons?domain=ghost.org&sz=64", V = be.useMemo(() => {
521
- var _;
522
- if (a != null && a.stats && ((_ = a == null ? void 0 : a.meta) != null && _.totals)) {
523
- const v = a.meta.totals;
524
- let y = v[0];
525
- if (!y)
526
- return oe("usd");
527
- for (const E of v)
528
- E.mrr > y.mrr && (y = E);
529
- return oe(y.currency);
530
- }
531
- return oe("usd");
532
- }, [a]), B = be.useMemo(() => M != null && M.stats ? M.stats.map((_) => {
533
- const v = _.source || "Direct", { domain: y } = ns(v, P), E = y ? `https://www.faviconextractor.com/favicon/${y}?larger=true` : O, Y = y && v !== "Direct" ? `https://${y}` : void 0;
534
- return {
535
- source: v,
536
- free_members: _.signups,
537
- // Backend returns 'signups', we map to 'free_members' for display
538
- paid_members: _.paid_conversions,
539
- // Backend returns 'paid_conversions', we map to 'paid_members' for display
540
- mrr: _.mrr,
541
- iconSrc: E,
542
- displayName: v,
543
- linkUrl: Y
544
- };
545
- }) : [], [M, P]), C = "Top sources", t = `Where did your growth come from ${ne(o)}`;
546
- return x != null && x.analytics.membersTrackSources ? w ? /* @__PURE__ */ e.jsx(q, { children: /* @__PURE__ */ e.jsx(S, { className: "last:border-none", children: /* @__PURE__ */ e.jsx(N, { className: "border-none py-2", colSpan: 1, children: /* @__PURE__ */ e.jsx(_e, { containerClassName: "space-y-2", count: 5, maxWidth: 75, randomize: !0 }) }) }) }) : /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
547
- B.length > 0 ? /* @__PURE__ */ e.jsx(
548
- Ne,
549
- {
550
- currencySymbol: V,
551
- data: B,
552
- defaultSourceIconUrl: O,
553
- limit: p
554
- }
555
- ) : /* @__PURE__ */ e.jsx(q, { children: /* @__PURE__ */ e.jsx(S, { className: "last:border-none", children: /* @__PURE__ */ e.jsx(N, { className: "border-none py-12 group-hover:!bg-transparent", colSpan: x != null && x.paidMembersEnabled ? 4 : 2, children: /* @__PURE__ */ e.jsx(
556
- he,
557
- {
558
- description: "Try adjusting your date range to see more data.",
559
- title: `No conversions ${ne(o)}`,
560
- children: /* @__PURE__ */ e.jsx(Ie, { strokeWidth: 1.5 })
561
- }
562
- ) }) }) }),
563
- T && B.length > p && /* @__PURE__ */ e.jsx(ts, { className: "border-none bg-transparent hover:!bg-transparent", children: /* @__PURE__ */ e.jsx(S, { children: /* @__PURE__ */ e.jsx(N, { className: "border-none bg-transparent px-0 pb-0 hover:!bg-transparent", colSpan: 4, children: /* @__PURE__ */ e.jsxs(ls, { children: [
564
- /* @__PURE__ */ e.jsx(is, { asChild: !0, children: /* @__PURE__ */ e.jsxs(xe, { variant: "outline", children: [
565
- "View all ",
566
- /* @__PURE__ */ e.jsx(Ke, {})
567
- ] }) }),
568
- /* @__PURE__ */ e.jsxs(os, { className: "overflow-y-auto pt-0 sm:max-w-[600px]", children: [
569
- /* @__PURE__ */ e.jsxs(cs, { className: "sticky top-0 z-40 -mx-6 bg-background/60 p-6 backdrop-blur", children: [
570
- /* @__PURE__ */ e.jsx(ds, { children: C }),
571
- /* @__PURE__ */ e.jsx(ms, { children: t })
572
- ] }),
573
- /* @__PURE__ */ e.jsx("div", { className: "group/datalist", children: /* @__PURE__ */ e.jsxs(we, { children: [
574
- /* @__PURE__ */ e.jsx(Ce, { children: /* @__PURE__ */ e.jsxs(S, { children: [
575
- /* @__PURE__ */ e.jsx(A, { children: "Source" }),
576
- /* @__PURE__ */ e.jsx(A, { className: "w-[110px] text-right", children: /* @__PURE__ */ e.jsx(W, { activeSortBy: r, setSortBy: b, sortBy: "free_members desc", children: "Free members" }) }),
577
- (x == null ? void 0 : x.paidMembersEnabled) && /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
578
- /* @__PURE__ */ e.jsx(A, { className: "w-[110px] text-right", children: /* @__PURE__ */ e.jsx(W, { activeSortBy: r, setSortBy: b, sortBy: "paid_members desc", children: "Paid members" }) }),
579
- /* @__PURE__ */ e.jsx(A, { className: "w-[110px] text-right", children: /* @__PURE__ */ e.jsx(W, { activeSortBy: r, setSortBy: b, sortBy: "mrr desc", children: "MRR impact" }) })
580
- ] })
581
- ] }) }),
582
- /* @__PURE__ */ e.jsx(
583
- Ne,
584
- {
585
- currencySymbol: V,
586
- data: B,
587
- defaultSourceIconUrl: O
588
- }
589
- )
590
- ] }) })
591
- ] })
592
- ] }) }) }) })
593
- ] }) : /* @__PURE__ */ e.jsx(q, { children: /* @__PURE__ */ e.jsx(S, { className: "last:border-none", children: /* @__PURE__ */ e.jsx(N, { className: "border-none py-12 group-hover:!bg-transparent", colSpan: x != null && x.paidMembersEnabled ? 4 : 2, children: /* @__PURE__ */ e.jsx(ke, {}) }) }) });
594
- }, Ns = (o, p, T) => {
595
- const u = o ?? 30, j = p ?? "mrr desc", { startDate: f, endDate: a } = J(() => ue(u), [u]), x = J(() => {
596
- const r = {
597
- date_from: te(f),
598
- date_to: te(a),
599
- order: j
600
- };
601
- return T === "posts" ? r.post_type = "post" : T === "pages" && (r.post_type = "page"), r;
602
- }, [f, a, j, T]), m = Object.fromEntries(
603
- Object.entries(x).filter(([, r]) => r !== void 0)
604
- );
605
- return Ue({ searchParams: m });
606
- }, Ms = () => {
607
- const { range: o, site: p } = le(), T = me(), [u, j] = X("free_members desc"), [f, a] = X(I.POSTS_AND_PAGES), [x] = Te(), { appSettings: m } = ie(), z = x.get("tab") || "total-members", { isLoading: r, chartData: b, totals: H, currencySymbol: M, subscriptionData: w } = fs(o), { data: P, isLoading: O } = Ns(
608
- o,
609
- u,
610
- f
611
- ), V = J(() => {
612
- const _ = ((P == null ? void 0 : P.stats) || []).reduce((l, s) => {
613
- const n = s.post_id || (s.title && s.title.trim() !== "" ? s.title : s.attribution_url);
614
- if (!n)
615
- return l;
616
- if (!l.has(n))
617
- l.set(n, s);
618
- else {
619
- const i = l.get(n);
620
- i.free_members += s.free_members, i.paid_members += s.paid_members, i.mrr += s.mrr, l.set(n, i);
621
- }
622
- return l;
623
- }, /* @__PURE__ */ new Map()), v = Array.from(_.values()), y = v.reduce((l, s) => l + s.free_members, 0), E = v.reduce((l, s) => l + s.paid_members, 0), Y = v.reduce((l, s) => l + s.mrr, 0);
624
- return v.map((l) => {
625
- let s = 0;
626
- return u.includes("free_members") && y > 0 ? s = l.free_members / y : u.includes("paid_members") && E > 0 ? s = l.paid_members / E : u.includes("mrr") && Y > 0 && (s = l.mrr / Y), {
627
- title: l.title || l.attribution_url,
628
- post_id: l.post_id,
629
- attribution_url: l.attribution_url,
630
- attribution_type: l.attribution_type,
631
- attribution_id: l.attribution_id,
632
- free_members: l.free_members,
633
- paid_members: l.paid_members,
634
- mrr: l.mrr,
635
- percentage: s,
636
- published_at: l.published_at,
637
- url_exists: l.url_exists ?? !0
638
- };
639
- });
640
- }, [P, u]), B = r, C = r || O;
641
- return /* @__PURE__ */ e.jsxs(We, { children: [
642
- /* @__PURE__ */ e.jsx(He, { children: /* @__PURE__ */ e.jsx(Qe, { children: /* @__PURE__ */ e.jsx(qe, {}) }) }),
643
- /* @__PURE__ */ e.jsxs(Xe, { data: B ? void 0 : b, isLoading: !1, loadingComponent: /* @__PURE__ */ e.jsx(e.Fragment, {}), children: [
644
- /* @__PURE__ */ e.jsx(ge, { "data-testid": "total-members-card", children: /* @__PURE__ */ e.jsx(ve, { children: /* @__PURE__ */ e.jsx(
645
- js,
646
- {
647
- chartData: b,
648
- currencySymbol: M,
649
- initialTab: z,
650
- isLoading: B,
651
- subscriptionData: w,
652
- totals: H
653
- }
654
- ) }) }),
655
- /* @__PURE__ */ e.jsxs(ge, { className: "w-full overflow-x-auto", "data-testid": "top-content-card", children: [
656
- /* @__PURE__ */ e.jsxs(Je, { children: [
657
- /* @__PURE__ */ e.jsx(Ze, { children: hs(f) }),
658
- /* @__PURE__ */ e.jsx(es, { children: xs(f, o, ne) })
659
- ] }),
660
- /* @__PURE__ */ e.jsx(ve, { children: /* @__PURE__ */ e.jsxs(we, { children: [
661
- /* @__PURE__ */ e.jsx(Ce, { children: /* @__PURE__ */ e.jsxs(S, { className: "[&>th]:h-auto [&>th]:pb-2 [&>th]:pt-0", children: [
662
- /* @__PURE__ */ e.jsx(A, { className: "min-w-[320px] pl-0", children: /* @__PURE__ */ e.jsx(ce, { defaultValue: f, variant: "button-sm", onValueChange: (t) => {
663
- a(t);
664
- }, children: /* @__PURE__ */ e.jsxs(de, { children: [
665
- /* @__PURE__ */ e.jsx(U, { value: I.POSTS_AND_PAGES, children: "Posts & pages" }),
666
- /* @__PURE__ */ e.jsx(U, { value: I.POSTS, children: "Posts" }),
667
- /* @__PURE__ */ e.jsx(U, { value: I.PAGES, children: "Pages" }),
668
- /* @__PURE__ */ e.jsx(U, { value: I.SOURCES, children: "Sources" })
669
- ] }) }) }),
670
- /* @__PURE__ */ e.jsx(A, { className: "w-[140px] text-right", children: m != null && m.paidMembersEnabled ? /* @__PURE__ */ e.jsx(W, { activeSortBy: u, setSortBy: j, sortBy: "free_members desc", children: "Free members" }) : /* @__PURE__ */ e.jsx(e.Fragment, { children: "Free members" }) }),
671
- (m == null ? void 0 : m.paidMembersEnabled) && /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
672
- /* @__PURE__ */ e.jsx(A, { className: "w-[140px] text-right", children: /* @__PURE__ */ e.jsx(W, { activeSortBy: u, setSortBy: j, sortBy: "paid_members desc", children: "Paid members" }) }),
673
- /* @__PURE__ */ e.jsx(A, { className: "w-[140px] text-right", children: /* @__PURE__ */ e.jsx(W, { activeSortBy: u, setSortBy: j, sortBy: "mrr desc", children: "MRR impact" }) })
674
- ] })
675
- ] }) }),
676
- f === I.SOURCES ? /* @__PURE__ */ e.jsx(
677
- ys,
678
- {
679
- limit: 20,
680
- range: o,
681
- setSortBy: (t) => j(t),
682
- showViewAll: !0,
683
- sortBy: u
684
- }
685
- ) : /* @__PURE__ */ e.jsx(q, { children: C ? /* @__PURE__ */ e.jsx(S, { className: "last:border-none", children: /* @__PURE__ */ e.jsx(N, { className: "border-none py-2", colSpan: 1, children: /* @__PURE__ */ e.jsx(_e, { containerClassName: "space-y-2", count: 5, maxWidth: 75, randomize: !0 }) }) }) : m != null && m.analytics.membersTrackSources ? V.length > 0 ? V.map((t, _) => /* @__PURE__ */ e.jsxs(S, { className: "last:border-none", children: [
686
- /* @__PURE__ */ e.jsx(N, { children: /* @__PURE__ */ e.jsxs("div", { className: "group/link inline-flex flex-col items-start gap-px", children: [
687
- t.post_id && t.attribution_type === "post" ? /* @__PURE__ */ e.jsx(
688
- xe,
689
- {
690
- className: "h-auto whitespace-normal p-0 text-left font-medium leading-tight hover:!underline",
691
- title: "View post analytics",
692
- variant: "link",
693
- onClick: bs(t.attribution_url, t.post_id, p.url || "", T, t.attribution_type),
694
- children: t.title
695
- }
696
- ) : /* @__PURE__ */ e.jsx("span", { className: "font-medium", children: t.title }),
697
- t.published_at && fe && new Date(t.published_at).getTime() > 0 && /* @__PURE__ */ e.jsxs("span", { className: "text-muted-foreground", children: [
698
- "Published on ",
699
- fe(t.published_at)
700
- ] })
701
- ] }) }),
702
- /* @__PURE__ */ e.jsxs(N, { className: "text-right font-mono text-sm", children: [
703
- t.free_members > 0 && "+",
704
- d(t.free_members)
705
- ] }),
706
- (m == null ? void 0 : m.paidMembersEnabled) && /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
707
- /* @__PURE__ */ e.jsxs(N, { className: "text-right font-mono text-sm", children: [
708
- t.paid_members > 0 && "+",
709
- d(t.paid_members)
710
- ] }),
711
- /* @__PURE__ */ e.jsxs(N, { className: "text-right font-mono text-sm", children: [
712
- t.mrr > 0 && "+",
713
- M,
714
- d(K(t.mrr))
715
- ] })
716
- ] })
717
- ] }, `${f}-${t.post_id || `${t.title}-${_}`}`)) : /* @__PURE__ */ e.jsx(S, { className: "border-none", children: /* @__PURE__ */ e.jsx(N, { className: "py-12 group-hover:!bg-transparent", colSpan: m != null && m.paidMembersEnabled ? 4 : 2, children: /* @__PURE__ */ e.jsx(
718
- he,
719
- {
720
- description: "Try adjusting your date range to see more data.",
721
- title: `No conversions ${ne(o)}`,
722
- children: /* @__PURE__ */ e.jsx(ss, { strokeWidth: 1.5 })
723
- }
724
- ) }) }) : /* @__PURE__ */ e.jsx(S, { className: "last:border-none", children: /* @__PURE__ */ e.jsx(N, { className: "border-none py-12 group-hover:!bg-transparent", colSpan: m != null && m.paidMembersEnabled ? 4 : 2, children: /* @__PURE__ */ e.jsx(ke, {}) }) }) })
725
- ] }) })
726
- ] })
727
- ] })
728
- ] });
729
- };
730
- export {
731
- Ms as default
732
- };
733
- //# sourceMappingURL=index-BBCJ2EZo.mjs.map