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.
- package/components/tryghost-i18n-6.12.0.tgz +0 -0
- package/core/boot.js +4 -2
- package/core/built/admin/assets/{_baseAssignValue-BX8EallQ.js → _baseAssignValue-hsL6ItjC.js} +1 -1
- package/core/built/admin/assets/{a-large-small-CKZJgscl.js → a-large-small-BPPu_Iy7.js} +1 -1
- package/core/built/admin/assets/admin-x-settings/admin-x-settings.js +1 -1
- package/core/built/admin/assets/admin-x-settings/{code-editor-view-n8DFeXbv.mjs → code-editor-view-Bq6l5arq.mjs} +2 -2
- package/core/built/admin/assets/admin-x-settings/{index-v6qQgUXt.mjs → index-CKaxer_o.mjs} +2 -2
- package/core/built/admin/assets/admin-x-settings/{index-CXL12uvO.mjs → index-CtYEAgeN.mjs} +2 -2
- package/core/built/admin/assets/admin-x-settings/{index-D4ye6uvI.mjs → index-D4NstoNQ.mjs} +11 -6
- package/core/built/admin/assets/admin-x-settings/{modals-CdsPaTfy.mjs → modals-BzljHVa7.mjs} +2 -2
- package/core/built/admin/assets/{at-sign-CqQzllfI.js → at-sign-CYnGzOFc.js} +1 -1
- package/core/built/admin/assets/{audience-select-DQD7iDOb.js → audience-select-DYoxiiwy.js} +1 -1
- package/core/built/admin/assets/{avatar-flipboard-uq7ptTxT.js → avatar-flipboard-C9-npfmZ.js} +1 -1
- package/core/built/admin/assets/{bluesky-sharing-qyIGv6Ny.js → bluesky-sharing-BGcmGcee.js} +1 -1
- package/core/built/admin/assets/{chart-DGA1MaFs.js → chart-CqJxisVP.js} +1 -1
- package/core/built/admin/assets/{chunk.524.1289543297329587cf8a.js → chunk.524.74a9629dd2ba0d21bbef.js} +7 -7
- package/core/built/admin/assets/{chunk.582.344ea0d0a16d671345cd.js → chunk.582.3846471396b3a7c46e66.js} +8 -8
- package/core/built/admin/assets/{code-editor-view-Bz6kXDiv.js → code-editor-view-C8l3gNnO.js} +1 -1
- package/core/built/admin/assets/{comments-C-lkEDkz.js → comments-CpHDoxov.js} +1 -1
- package/core/built/admin/assets/{copy-BFuV16bY.js → copy-DWiB-781.js} +1 -1
- package/core/built/admin/assets/{data-list-Bw1CQEZ9.js → data-list-yngXNZDF.js} +1 -1
- package/core/built/admin/assets/{deleted-feed-item-CmNbSYiO.js → deleted-feed-item-C0FcyLMN.js} +1 -1
- package/core/built/admin/assets/{edit-profile-DlIPB2km.js → edit-profile-BjtDkDAq.js} +1 -1
- package/core/built/admin/assets/{empty-indicator-DBrIZcFq.js → empty-indicator-BXWniwsl.js} +1 -1
- package/core/built/admin/assets/{en-BBc7b85q.js → en-B8qaJx-T.js} +1 -1
- package/core/built/admin/assets/{feed-B3XQzKZl.js → feed-DsCVb1SA.js} +1 -1
- package/core/built/admin/assets/{filters-DUFXZZnu.js → filters-jAXQSPq6.js} +1 -1
- package/core/built/admin/assets/{gh-chart-BV97-O7c.js → gh-chart-DwTCK8z_.js} +1 -1
- package/core/built/admin/assets/{ghost-9aa1e7c5992f122dba6932af78bf8e56.js → ghost-6367d022df9db9dacbcb9bfa30232ec7.js} +2 -2
- package/core/built/admin/assets/{growth-njR0GqK2.js → growth-DshcRqda.js} +1 -1
- package/core/built/admin/assets/{hash-CdH0ikFp.js → hash-p9dv0yuc.js} +1 -1
- package/core/built/admin/assets/{inbox-Bd0uf1Ez.js → inbox-CRoP9sy5.js} +1 -1
- package/core/built/admin/assets/{index-Kji6JKl7.js → index-6syrC9X1.js} +1 -1
- package/core/built/admin/assets/{index-C7M19LpB.js → index-BKtz3UH0.js} +1 -1
- package/core/built/admin/assets/{index-DWk7hKRR.js → index-BwY94Fb4.js} +1 -1
- package/core/built/admin/assets/{index-BFhECYgc.js → index-C3DF6aFe.js} +1 -1
- package/core/built/admin/assets/index-C6NCNp1B.js +1 -0
- package/core/built/admin/assets/{index-BYawr8p9.js → index-CJU9a2PB.js} +3 -3
- package/core/built/admin/assets/{index-CIE2_z5J.js → index-CUWE7aD1.js} +1 -1
- package/core/built/admin/assets/{index-DgRIbSpg.js → index-CuQ_II0e.js} +1 -1
- package/core/built/admin/assets/{index-Birw80cQ.js → index-DG8f-HuU.js} +1 -1
- package/core/built/admin/assets/{index-DziHC2du.js → index-DItZTRQ4.js} +1 -1
- package/core/built/admin/assets/{index-DG53N3Xt.js → index-eLx96SEn.js} +1 -1
- package/core/built/admin/assets/{index-DCw6JaEl.js → index-j2_Q-_8H.js} +1 -1
- package/core/built/admin/assets/{index-BZ21H0xH.js → index-qWpHJAMP.js} +1 -1
- package/core/built/admin/assets/{index-DXCu9e7c.js → index-sy6xRtoO.js} +1 -1
- package/core/built/admin/assets/{koenig-lexical-BDJVCHtm.js → koenig-lexical-DgAlBHHS.js} +1 -1
- package/core/built/admin/assets/{kpi-card-cv8roErt.js → kpi-card-CHZSLw4p.js} +1 -1
- package/core/built/admin/assets/{kpis-Dt4OFY3L.js → kpis-DzbAHfKK.js} +1 -1
- package/core/built/admin/assets/{links-08beB3Ij.js → links-BQHRbn46.js} +1 -1
- package/core/built/admin/assets/{lucide-react-DKlmxVQI.js → lucide-react-B7UnD_Dp.js} +1 -1
- package/core/built/admin/assets/{main-layout-Cl09wG7F.js → main-layout-9nmU5WlG.js} +1 -1
- package/core/built/admin/assets/{message-square-text-CaMVBVPr.js → message-square-text-CS3iRuPc.js} +1 -1
- package/core/built/admin/assets/{minus-2XwCoFJV.js → minus-emzwh6hq.js} +1 -1
- package/core/built/admin/assets/{modals-CIgzYQgv.js → modals-CumFuZ2d.js} +1 -1
- package/core/built/admin/assets/{moderation-FjlsSym6.js → moderation-DyfFc9m4.js} +1 -1
- package/core/built/admin/assets/{newsletter-BNOwZNlE.js → newsletter-BWul5IFc.js} +1 -1
- package/core/built/admin/assets/{newsletters-DUusEYSg.js → newsletters-N6bwI1OF.js} +1 -1
- package/core/built/admin/assets/{note-BpYwIDK6.js → note-CiBzkHzz.js} +1 -1
- package/core/built/admin/assets/{overview-Y5QYPClr.js → overview-D9gRvn7X.js} +1 -1
- package/core/built/admin/assets/{pagemenu-BMXHDXYy.js → pagemenu-aHubMPwB.js} +1 -1
- package/core/built/admin/assets/{post-analytics-UerFnJse.js → post-analytics-Bm9xH8nA.js} +1 -1
- package/core/built/admin/assets/{post-analytics-context-geHk7rOj.js → post-analytics-context-C7oW3aBz.js} +1 -1
- package/core/built/admin/assets/{post-analytics-header-DXfc4KeX.js → post-analytics-header-BjGFgN6A.js} +1 -1
- package/core/built/admin/assets/{post-share-modal-Dql4fYjR.js → post-share-modal-Su923uIc.js} +1 -1
- package/core/built/admin/assets/{posts-Bsvw11Zo.js → posts-BwP7BNcB.js} +1 -1
- package/core/built/admin/assets/{referrers-B8xJpCcR.js → referrers-n_ln9DqI.js} +1 -1
- package/core/built/admin/assets/{repeat-COP-3g8d.js → repeat-ms5ocvE0.js} +1 -1
- package/core/built/admin/assets/{reply-JE8tmvOn.js → reply-BvO85IDn.js} +1 -1
- package/core/built/admin/assets/{select-BhvNY3I-.js → select-B4QhMW5f.js} +1 -1
- package/core/built/admin/assets/{settings-BJwVfuWG.js → settings-D5rGcWJ7.js} +4 -4
- package/core/built/admin/assets/{settings-C6ZUZQe4.js → settings-QtZ6a2TL.js} +1 -1
- package/core/built/admin/assets/{sort-button-iOtR-vQ1.js → sort-button-84sYUZMN.js} +1 -1
- package/core/built/admin/assets/{source-icon-C2iFWMlV.js → source-icon-Bzw-AU8p.js} +1 -1
- package/core/built/admin/assets/{sprout-BW9HFVU8.js → sprout-C2R5CbXV.js} +1 -1
- package/core/built/admin/assets/{square-BCNGSZhW.js → square-DT1uWkxs.js} +1 -1
- package/core/built/admin/assets/stats/{audience-select-DNAWmT7R.mjs → audience-select-fTCiZ9MT.mjs} +3 -3
- package/core/built/admin/assets/stats/{index-DbGvSTMe.mjs → index-BKgioyC7.mjs} +5 -5
- package/core/built/admin/assets/stats/{index-s19ZmxbX.mjs → index-CR2t5Xd-.mjs} +5 -5
- package/core/built/admin/assets/stats/index-DEkYwR7C.mjs +739 -0
- package/core/built/admin/assets/stats/{index-BS3KMSy9.mjs → index-Djwey97a.mjs} +5 -5
- package/core/built/admin/assets/stats/{index-MOQSSYwT.mjs → index-FiU_XgEe.mjs} +6 -6
- package/core/built/admin/assets/stats/{sort-button-D76rcldr.mjs → sort-button-Bvi1wfa7.mjs} +3 -3
- package/core/built/admin/assets/stats/{stats-CJ7fhUyT.mjs → stats-Bbm6yWZq.mjs} +2 -2
- package/core/built/admin/assets/stats/stats.js +1 -1
- package/core/built/admin/assets/stats/{tabs-CkbxYgOE.mjs → tabs-BKwH5k-q.mjs} +3 -3
- package/core/built/admin/assets/stats/{url-helpers-DICtqCrE.mjs → url-helpers-DmHnUIGc.mjs} +9 -9
- package/core/built/admin/assets/stats/{use-growth-stats-DzO7zEy4.mjs → use-growth-stats-BVj3j1hb.mjs} +3 -3
- package/core/built/admin/assets/{stats-r0Bphuvi.js → stats-B1mhlQSp.js} +1 -1
- package/core/built/admin/assets/{stats-view-DzZxrBDz.js → stats-view-C6MTCwRW.js} +1 -1
- package/core/built/admin/assets/{step-1-CUoUOyMm.js → step-1-CzQmZJ93.js} +1 -1
- package/core/built/admin/assets/{step-2-CpAkPD8D.js → step-2-DXGDWSQo.js} +1 -1
- package/core/built/admin/assets/{step-3-Ci6oJDmK.js → step-3-CYuxXKac.js} +1 -1
- package/core/built/admin/assets/{table-DeBuf80X.js → table-mjAkKNdb.js} +1 -1
- package/core/built/admin/assets/{tabs-C2sFfNcp.js → tabs-BwQ-i6MY.js} +1 -1
- package/core/built/admin/assets/{tags-Bl6G5rvf.js → tags-BkUqCuvX.js} +1 -1
- package/core/built/admin/assets/{tags-BL_N4nn2.js → tags-DXDZbfxp.js} +1 -1
- package/core/built/admin/assets/{toggle-group-B2X-8giI.js → toggle-group-CqDO3Kkx.js} +1 -1
- package/core/built/admin/assets/{topic-filter-DeqMID_s.js → topic-filter-DnuJJBAE.js} +1 -1
- package/core/built/admin/assets/{trash-BglGemAb.js → trash-CZ3EXwTL.js} +1 -1
- package/core/built/admin/assets/{url-helpers-84icqAuE.js → url-helpers-BE3VXr__.js} +1 -1
- package/core/built/admin/assets/{use-growth-stats-DF-7tL8g.js → use-growth-stats-CiuWWM6O.js} +1 -1
- package/core/built/admin/assets/{use-infinite-virtual-scroll-BHH7oscK.js → use-infinite-virtual-scroll-BjATkxBj.js} +1 -1
- package/core/built/admin/assets/{use-simple-pagination-BsvYfixw.js → use-simple-pagination-C9cb7dDz.js} +1 -1
- package/core/built/admin/assets/{user-round-check-BjHbfXKY.js → user-round-check-D3ihrrKL.js} +1 -1
- package/core/built/admin/assets/{wallet-cards-KaTkgqvi.js → wallet-cards-Do7nPf3f.js} +1 -1
- package/core/built/admin/assets/{web-CUWbpFil.js → web-BEwI2Gfy.js} +1 -1
- package/core/built/admin/index-forward.html +4 -4
- package/core/built/admin/index.html +3 -3
- package/core/frontend/web/middleware/index.js +1 -0
- package/core/frontend/web/middleware/serve-indexnow-key.js +66 -0
- package/core/frontend/web/site.js +3 -0
- package/core/server/api/endpoints/authentication.js +1 -1
- package/core/server/api/endpoints/pages.js +1 -1
- package/core/server/api/endpoints/posts-public.js +1 -1
- package/core/server/api/endpoints/posts.js +1 -1
- package/core/server/api/endpoints/search-index-public.js +1 -1
- package/core/server/api/endpoints/search-index.js +1 -1
- package/core/server/api/endpoints/users.js +1 -1
- package/core/server/api/endpoints/utils/serializers/input/settings.js +2 -1
- package/core/server/api/endpoints/utils/serializers/output/mappers/posts.js +1 -1
- package/core/server/api/endpoints/utils/validators/input/settings.js +1 -1
- package/core/server/data/exporter/table-lists.js +2 -1
- package/core/server/data/migrations/versions/6.12/2026-01-08-11-48-16-add-indexnow-api-key-setting.js +9 -0
- package/core/server/data/schema/default-settings/default-settings.json +6 -0
- package/core/server/lib/lexical.js +1 -1
- package/core/server/models/settings.js +2 -1
- package/core/server/services/activitypub/{ActivityPubServiceWrapper.js → activity-pub-service-wrapper.js} +1 -1
- package/core/server/services/activitypub/{ActivityPubService.ts → activity-pub-service.ts} +1 -1
- package/core/server/services/activitypub/index.js +1 -1
- package/core/server/services/adapter-manager/index.js +1 -1
- package/core/server/services/announcement-bar-service/{AnnouncementBarSettings.js → announcement-bar-settings.js} +1 -1
- package/core/server/services/announcement-bar-service/index.js +1 -1
- package/core/server/services/audience-feedback/{AudienceFeedbackController.js → audience-feedback-controller.js} +3 -3
- package/core/server/services/audience-feedback/index.js +4 -4
- package/core/server/services/auth/session/express-session.js +1 -1
- package/core/server/services/comments/{CommentsController.js → comments-controller.js} +2 -2
- package/core/server/services/comments/{CommentsServiceEmails.js → comments-service-emails.js} +1 -1
- package/core/server/services/comments/{CommentsService.js → comments-service.js} +1 -1
- package/core/server/services/comments/index.js +3 -3
- package/core/server/services/custom-redirects/index.js +2 -2
- package/core/server/services/donations/{DonationBookshelfRepository.ts → donation-bookshelf-repository.ts} +1 -1
- package/core/server/services/donations/{DonationServiceWrapper.js → donation-service-wrapper.js} +1 -1
- package/core/server/services/donations/index.js +1 -1
- package/core/server/services/email-address/{EmailAddressServiceWrapper.js → email-address-service-wrapper.js} +2 -2
- package/core/server/services/email-address/{EmailAddressService.js → email-address-service.js} +4 -4
- package/core/server/services/email-address/{EmailAddressService.ts → email-address-service.ts} +1 -1
- package/core/server/services/email-address/index.js +1 -1
- package/core/server/services/email-analytics/{EmailAnalyticsProviderMailgun.js → email-analytics-provider-mailgun.js} +1 -1
- package/core/server/services/email-analytics/{EmailAnalyticsServiceWrapper.js → email-analytics-service-wrapper.js} +5 -5
- package/core/server/services/email-analytics/{EmailAnalyticsService.js → email-analytics-service.js} +2 -2
- package/core/server/services/email-analytics/index.js +1 -1
- package/core/server/services/email-analytics/jobs/fetch-latest/index.js +1 -1
- package/core/server/services/email-service/{BatchSendingService.js → batch-sending-service.js} +8 -8
- package/core/server/services/email-service/{EmailEventProcessor.js → email-event-processor.js} +6 -6
- package/core/server/services/email-service/{EmailEventStorage.js → email-event-storage.js} +1 -1
- package/core/server/services/email-service/{EmailRenderer.js → email-renderer.js} +1 -1
- package/core/server/services/email-service/{EmailServiceWrapper.js → email-service-wrapper.js} +9 -9
- package/core/server/services/email-service/{EmailService.js → email-service.js} +13 -13
- package/core/server/services/email-service/index.js +1 -1
- package/core/server/services/email-service/{MailgunEmailProvider.js → mailgun-email-provider.js} +1 -1
- package/core/server/services/email-service/{SendingService.js → sending-service.js} +6 -6
- package/core/server/services/email-suppression-list/{InMemoryEmailSuppressionList.js → in-memory-email-suppression-list.js} +1 -1
- package/core/server/services/email-suppression-list/{MailgunEmailSuppressionList.js → mailgun-email-suppression-list.js} +3 -3
- package/core/server/services/email-suppression-list/service.js +2 -2
- package/core/server/services/explore/index.js +2 -2
- package/core/server/services/explore-ping/index.js +2 -2
- package/core/server/services/frontend-data-service/index.js +1 -1
- package/core/server/services/identity-tokens/{IdentityTokenServiceWrapper.js → identity-token-service-wrapper.js} +1 -1
- package/core/server/services/identity-tokens/index.js +1 -1
- package/core/server/services/indexnow.js +212 -0
- package/core/server/services/invites/index.js +1 -1
- package/core/server/services/link-redirection/index.js +2 -2
- package/core/server/services/link-redirection/{LinkRedirectRepository.js → link-redirect-repository.js} +1 -1
- package/core/server/services/link-redirection/{LinkRedirectsService.js → link-redirects-service.js} +2 -2
- package/core/server/services/link-redirection/{RedirectEvent.js → redirect-event.js} +1 -1
- package/core/server/services/link-tracking/index.js +3 -3
- package/core/server/services/link-tracking/{LinkClickRepository.js → link-click-repository.js} +1 -1
- package/core/server/services/link-tracking/{LinkClickTrackingService.js → link-click-tracking-service.js} +4 -4
- package/core/server/services/link-tracking/{PostLinkRepository.js → post-link-repository.js} +7 -7
- package/core/server/services/mail/{GhostMailer.js → ghost-mailer.js} +1 -1
- package/core/server/services/mail/index.js +2 -2
- package/core/server/services/media-inliner/service.js +1 -1
- package/core/server/services/member-attribution/README.md +6 -6
- package/core/server/services/member-attribution/{AttributionBuilder.js → attribution-builder.js} +4 -4
- package/core/server/services/member-attribution/index.js +5 -5
- package/core/server/services/member-attribution/{MemberAttributionService.js → member-attribution-service.js} +9 -9
- package/core/server/services/member-attribution/{ReferrerTranslator.js → referrer-translator.js} +1 -1
- package/core/server/services/member-attribution/{UrlTranslator.js → url-translator.js} +1 -1
- package/core/server/services/member-welcome-emails/constants.js +22 -1
- package/core/server/services/member-welcome-emails/service.js +23 -5
- package/core/server/services/members/api.js +1 -1
- package/core/server/services/members/importer/index.js +3 -3
- package/core/server/services/members/importer/{MembersCSVImporter.js → members-csv-importer.js} +2 -2
- package/core/server/services/members/members-api/members-api.js +14 -14
- package/core/server/services/members/members-api/repositories/{MemberRepository.js → member-repository.js} +17 -8
- package/core/server/services/members/members-api/services/{MemberBREADService.js → member-bread-service.js} +1 -1
- package/core/server/services/members/members-api/services/{PaymentsService.js → payments-service.js} +12 -12
- package/core/server/services/members/service.js +4 -4
- package/core/server/services/members-events/index.js +3 -3
- package/core/server/services/members-events/{LastSeenAtUpdater.js → last-seen-at-updater.js} +2 -2
- package/core/server/services/mentions/{BookshelfMentionRepository.js → bookshelf-mention-repository.js} +9 -9
- package/core/server/services/mentions/{InMemoryMentionRepository.js → in-memory-mention-repository.js} +4 -4
- package/core/server/services/mentions/{MentionController.js → mention-controller.js} +5 -5
- package/core/server/services/mentions/{MentionCreatedEvent.js → mention-created-event.js} +1 -1
- package/core/server/services/mentions/{Mention.js → mention.js} +1 -1
- package/core/server/services/mentions/{MentionsAPI.js → mentions-api.js} +1 -1
- package/core/server/services/mentions/{ResourceService.js → resource-service.js} +2 -2
- package/core/server/services/mentions/{RoutingService.js → routing-service.js} +2 -2
- package/core/server/services/mentions/service.js +11 -11
- package/core/server/services/mentions/{WebmentionMetadata.js → webmention-metadata.js} +1 -1
- package/core/server/services/mentions-email-report/job.js +1 -1
- package/core/server/services/mentions-email-report/{MentionEmailReportJob.js → mention-email-report-job.js} +1 -1
- package/core/server/services/mentions-email-report/service.js +2 -2
- package/core/server/services/milestones/{BookshelfMilestoneRepository.js → bookshelf-milestone-repository.js} +2 -2
- package/core/server/services/milestones/{InMemoryMilestoneRepository.js → in-memory-milestone-repository.js} +2 -2
- package/core/server/services/milestones/{Milestone.js → milestone.js} +1 -1
- package/core/server/services/milestones/{MilestonesService.js → milestones-service.js} +1 -1
- package/core/server/services/milestones/service.js +4 -4
- package/core/server/services/newsletters/index.js +2 -2
- package/core/server/services/newsletters/{NewslettersService.js → newsletters-service.js} +1 -1
- package/core/server/services/notifications/index.js +1 -1
- package/core/server/services/oembed/service.js +3 -3
- package/core/server/services/offers/application/{OfferMapper.js → offer-mapper.js} +1 -1
- package/core/server/services/offers/application/{OffersAPI.js → offers-api.js} +9 -9
- package/core/server/services/offers/application/{UniqueChecker.js → unique-checker.js} +2 -2
- package/core/server/services/offers/domain/events/{OfferCodeChangeEvent.js → offer-code-change-event.js} +1 -1
- package/core/server/services/offers/domain/events/{OfferCreatedEvent.js → offer-created-event.js} +1 -1
- package/core/server/services/offers/domain/models/{OfferAmount.js → offer-amount.js} +1 -1
- package/core/server/services/offers/domain/models/{OfferCadence.js → offer-cadence.js} +1 -1
- package/core/server/services/offers/domain/models/{OfferCode.js → offer-code.js} +1 -1
- package/core/server/services/offers/domain/models/{OfferCreatedAt.js → offer-created-at.js} +1 -1
- package/core/server/services/offers/domain/models/{OfferCurrency.js → offer-currency.js} +1 -1
- package/core/server/services/offers/domain/models/{OfferDescription.js → offer-description.js} +1 -1
- package/core/server/services/offers/domain/models/{OfferDuration.js → offer-duration.js} +1 -1
- package/core/server/services/offers/domain/models/{OfferName.js → offer-name.js} +1 -1
- package/core/server/services/offers/domain/models/{OfferStatus.js → offer-status.js} +1 -1
- package/core/server/services/offers/domain/models/{OfferTitle.js → offer-title.js} +1 -1
- package/core/server/services/offers/domain/models/{OfferType.js → offer-type.js} +1 -1
- package/core/server/services/offers/domain/models/{Offer.js → offer.js} +14 -14
- package/core/server/services/offers/domain/models/{StripeCoupon.js → stripe-coupon.js} +1 -1
- package/core/server/services/offers/{OfferBookshelfRepository.js → offer-bookshelf-repository.js} +6 -6
- package/core/server/services/offers/{OffersModule.js → offers-module.js} +4 -4
- package/core/server/services/offers/service.js +3 -3
- package/core/server/services/outbox/index.js +2 -2
- package/core/server/services/outbox/jobs/outbox-job.js +2 -2
- package/core/server/services/posts/posts-service-instance.js +47 -0
- package/core/server/services/posts/posts-service.js +572 -45
- package/core/server/services/recommendations/index.js +1 -1
- package/core/server/services/recommendations/{RecommendationEnablerService.js → recommendation-enabler-service.js} +2 -2
- package/core/server/services/recommendations/{RecommendationServiceWrapper.js → recommendation-service-wrapper.js} +2 -2
- package/core/server/services/recommendations/service/{BookshelfClickEventRepository.js → bookshelf-click-event-repository.js} +4 -4
- package/core/server/services/recommendations/service/{BookshelfClickEventRepository.ts → bookshelf-click-event-repository.ts} +2 -2
- package/core/server/services/recommendations/service/{BookshelfRecommendationRepository.js → bookshelf-recommendation-repository.js} +4 -4
- package/core/server/services/recommendations/service/{BookshelfRecommendationRepository.ts → bookshelf-recommendation-repository.ts} +3 -3
- package/core/server/services/recommendations/service/{BookshelfSubscribeEventRepository.js → bookshelf-subscribe-event-repository.js} +4 -4
- package/core/server/services/recommendations/service/{BookshelfSubscribeEventRepository.ts → bookshelf-subscribe-event-repository.ts} +2 -2
- package/core/server/services/recommendations/service/{InMemoryRecommendationRepository.js → in-memory-recommendation-repository.js} +2 -2
- package/core/server/services/recommendations/service/{InMemoryRecommendationRepository.ts → in-memory-recommendation-repository.ts} +3 -3
- package/core/server/services/recommendations/service/{IncomingRecommendationController.js → incoming-recommendation-controller.js} +2 -2
- package/core/server/services/recommendations/service/{IncomingRecommendationController.ts → incoming-recommendation-controller.ts} +3 -3
- package/core/server/services/recommendations/service/{IncomingRecommendationEmailRenderer.ts → incoming-recommendation-email-renderer.ts} +2 -2
- package/core/server/services/recommendations/service/{IncomingRecommendationService.ts → incoming-recommendation-service.ts} +2 -2
- package/core/server/services/recommendations/service/index.js +15 -15
- package/core/server/services/recommendations/service/index.ts +15 -15
- package/core/server/services/recommendations/service/{RecommendationController.js → recommendation-controller.js} +13 -13
- package/core/server/services/recommendations/service/{RecommendationController.ts → recommendation-controller.ts} +4 -4
- package/core/server/services/recommendations/service/{RecommendationRepository.ts → recommendation-repository.ts} +3 -3
- package/core/server/services/recommendations/service/{RecommendationService.js → recommendation-service.js} +6 -6
- package/core/server/services/recommendations/service/{RecommendationService.ts → recommendation-service.ts} +8 -8
- package/core/server/services/recommendations/service/{Recommendation.js → recommendation.js} +4 -4
- package/core/server/services/recommendations/service/{Recommendation.ts → recommendation.ts} +1 -1
- package/core/server/services/recommendations/service/{WellknownService.ts → well-known-service.ts} +1 -1
- package/core/server/services/route-settings/index.js +4 -4
- package/core/server/services/settings/{SettingsBREADService.js → settings-bread-service.js} +1 -1
- package/core/server/services/settings/settings-service.js +2 -2
- package/core/server/services/settings-helpers/index.js +1 -1
- package/core/server/services/settings-helpers/{SettingsHelpers.js → settings-helpers.js} +5 -5
- package/core/server/services/slack-notifications/service.js +4 -4
- package/core/server/services/slack-notifications/{SlackNotificationsService.js → slack-notifications-service.js} +2 -2
- package/core/server/services/slack-notifications/{SlackNotifications.js → slack-notifications.js} +2 -2
- package/core/server/services/staff/index.js +1 -1
- package/core/server/services/staff/{StaffServiceEmails.js → staff-service-emails.js} +2 -2
- package/core/server/services/staff/{StaffService.js → staff-service.js} +2 -2
- package/core/server/services/stats/{PostsStatsService.js → posts-stats-service.js} +25 -25
- package/core/server/services/stats/{ReferrersStatsService.js → referrers-stats-service.js} +3 -3
- package/core/server/services/stats/service.js +1 -1
- package/core/server/services/stats/{StatsService.js → stats-service.js} +23 -23
- package/core/server/services/stripe/events/index.js +2 -2
- package/core/server/services/stripe/service.js +1 -1
- package/core/server/services/stripe/services/webhook/{CheckoutSessionEventService.js → checkout-session-event-service.js} +2 -2
- package/core/server/services/stripe/{StripeMigrations.js → stripe-migrations.js} +1 -1
- package/core/server/services/stripe/{StripeService.js → stripe-service.js} +8 -8
- package/core/server/services/stripe/{WebhookController.js → webhook-controller.js} +4 -4
- package/core/server/services/stripe/{WebhookManager.js → webhook-manager.js} +5 -5
- package/core/server/services/themes/storage.js +1 -1
- package/core/server/services/tiers/{InMemoryTierRepository.js → in-memory-tier-repository.js} +1 -1
- package/core/server/services/tiers/service.js +2 -2
- package/core/server/services/tiers/{TierActivatedEvent.js → tier-activated-event.js} +1 -1
- package/core/server/services/tiers/{TierArchivedEvent.js → tier-archived-event.js} +1 -1
- package/core/server/services/tiers/{TierCreatedEvent.js → tier-created-event.js} +1 -1
- package/core/server/services/tiers/{TierNameChangeEvent.js → tier-name-change-event.js} +1 -1
- package/core/server/services/tiers/{TierPriceChangeEvent.js → tier-price-change-event.js} +1 -1
- package/core/server/services/tiers/{TierRepository.js → tier-repository.js} +7 -7
- package/core/server/services/tiers/{Tier.js → tier.js} +5 -5
- package/core/server/services/tiers/{TiersAPI.js → tiers-api.js} +1 -1
- package/core/server/services/tinybird/index.js +1 -1
- package/core/server/services/tinybird/{TinybirdServiceWrapper.js → tinybird-service-wrapper.js} +2 -2
- package/core/server/services/update-check/index.js +1 -1
- package/core/server/services/url/index.js +2 -2
- package/core/server/services/url/{Resources.js → resources.js} +1 -1
- package/core/server/services/url/{UrlGenerator.js → url-generator.js} +1 -1
- package/core/server/services/url/{UrlService.js → url-service.js} +4 -4
- package/core/server/services/url/{Urls.js → urls.js} +1 -1
- package/core/server/services/webhooks/listen.js +1 -1
- package/core/shared/labs.js +2 -1
- package/package.json +3 -3
- package/tsconfig.tsbuildinfo +1 -1
- package/components/tryghost-i18n-6.11.0.tgz +0 -0
- package/core/built/admin/assets/index-Cr_YX9yU.js +0 -1
- package/core/built/admin/assets/stats/index-BBCJ2EZo.mjs +0 -733
- package/core/server/services/posts/PostsService.js +0 -574
- /package/core/server/{GhostServer.js → ghost-server.js} +0 -0
- /package/core/server/services/activitypub/{ActivityPubService.js → activity-pub-service.js} +0 -0
- /package/core/server/services/adapter-manager/{AdapterManager.js → adapter-manager.js} +0 -0
- /package/core/server/services/announcement-bar-service/{AnnouncementVisibilityValues.js → announcement-visibility-values.js} +0 -0
- /package/core/server/services/audience-feedback/{AudienceFeedbackService.js → audience-feedback-service.js} +0 -0
- /package/core/server/services/audience-feedback/{FeedbackRepository.js → feedback-repository.js} +0 -0
- /package/core/server/services/audience-feedback/{Feedback.js → feedback.js} +0 -0
- /package/core/server/services/auth/session/{SessionStore.js → session-store.js} +0 -0
- /package/core/server/services/comments/{CommentsServiceEmailRenderer.js → comments-service-email-renderer.js} +0 -0
- /package/core/server/services/comments/{CommentsStatsService.js → comments-stats-service.js} +0 -0
- /package/core/server/services/custom-redirects/{CustomRedirectsAPI.js → custom-redirects-api.js} +0 -0
- /package/core/server/services/donations/{DonationBookshelfRepository.js → donation-bookshelf-repository.js} +0 -0
- /package/core/server/services/donations/{DonationPaymentEvent.js → donation-payment-event.js} +0 -0
- /package/core/server/services/donations/{DonationPaymentEvent.ts → donation-payment-event.ts} +0 -0
- /package/core/server/services/email-address/{EmailAddressParser.js → email-address-parser.js} +0 -0
- /package/core/server/services/email-address/{EmailAddressParser.js.d.ts → email-address-parser.js.d.ts} +0 -0
- /package/core/server/services/email-analytics/{EventProcessingResult.js → event-processing-result.js} +0 -0
- /package/core/server/services/email-analytics/events/{StartEmailAnalyticsJobEvent.js → start-email-analytics-job-event.js} +0 -0
- /package/core/server/services/email-service/{DomainWarmingService.js → domain-warming-service.js} +0 -0
- /package/core/server/services/email-service/{DomainWarmingService.ts → domain-warming-service.ts} +0 -0
- /package/core/server/services/email-service/{EmailBodyCache.js → email-body-cache.js} +0 -0
- /package/core/server/services/email-service/{EmailController.js → email-controller.js} +0 -0
- /package/core/server/services/email-service/{EmailSegmenter.js → email-segmenter.js} +0 -0
- /package/core/server/services/email-service/events/{EmailBouncedEvent.js → email-bounced-event.js} +0 -0
- /package/core/server/services/email-service/events/{EmailDeliveredEvent.js → email-delivered-event.js} +0 -0
- /package/core/server/services/email-service/events/{EmailOpenedEvent.js → email-opened-event.js} +0 -0
- /package/core/server/services/email-service/events/{EmailTemporaryBouncedEvent.js → email-temporary-bounced-event.js} +0 -0
- /package/core/server/services/email-service/events/{EmailUnsubscribedEvent.js → email-unsubscribed-event.js} +0 -0
- /package/core/server/services/email-service/events/{SpamComplaintEvent.js → spam-complaint-event.js} +0 -0
- /package/core/server/services/email-suppression-list/{EmailSuppressionList.js → email-suppression-list.js} +0 -0
- /package/core/server/services/explore/{ExploreService.js → explore-service.js} +0 -0
- /package/core/server/services/explore-ping/{ExplorePingService.js → explore-ping-service.js} +0 -0
- /package/core/server/services/frontend-data-service/{FrontendDataService.js → front-end-data-service.js} +0 -0
- /package/core/server/services/identity-tokens/{IdentityTokenService.js → identity-token-service.js} +0 -0
- /package/core/server/services/identity-tokens/{IdentityTokenService.ts → identity-token-service.ts} +0 -0
- /package/core/server/services/invites/{Invites.js → invites.js} +0 -0
- /package/core/server/services/lib/{DynamicRedirectManager.js → dynamic-redirect-manager.js} +0 -0
- /package/core/server/services/lib/{EmailContentGenerator.js → email-content-generator.js} +0 -0
- /package/core/server/services/lib/{InMemoryRepository.js → in-memory-repository.js} +0 -0
- /package/core/server/services/lib/{InMemoryRepository.ts → in-memory-repository.ts} +0 -0
- /package/core/server/services/lib/magic-link/{MagicLink.js → magic-link.js} +0 -0
- /package/core/server/services/lib/{MailgunClient.js → mailgun-client.js} +0 -0
- /package/core/server/services/link-redirection/{LinkRedirect.js → link-redirect.js} +0 -0
- /package/core/server/services/link-tracking/{ClickEvent.js → click-event.js} +0 -0
- /package/core/server/services/link-tracking/{FullPostLink.js → full-post-link.js} +0 -0
- /package/core/server/services/link-tracking/{PostLink.js → post-link.js} +0 -0
- /package/core/server/services/media-inliner/{ExternalMediaInliner.js → external-media-inliner.js} +0 -0
- /package/core/server/services/member-attribution/{OutboundLinkTagger.js → outbound-link-tagger.js} +0 -0
- /package/core/server/services/member-attribution/{UrlHistory.js → url-history.js} +0 -0
- /package/core/server/services/member-welcome-emails/{MemberWelcomeEmailRenderer.js → member-welcome-email-renderer.js} +0 -0
- /package/core/server/services/members/importer/{MembersCSVImporterStripeUtils.js → members-csv-importer-stripe-utils.js} +0 -0
- /package/core/server/services/members/members-api/controllers/{MemberController.js → member-controller.js} +0 -0
- /package/core/server/services/members/members-api/controllers/{RouterController.js → router-controller.js} +0 -0
- /package/core/server/services/members/members-api/controllers/{WellKnownController.js → well-known-controller.js} +0 -0
- /package/core/server/services/members/members-api/repositories/{EventRepository.js → event-repository.js} +0 -0
- /package/core/server/services/members/members-api/repositories/{ProductRepository.js → product-repository.js} +0 -0
- /package/core/server/services/members/members-api/services/{GeolocationService.js → geolocation-service.js} +0 -0
- /package/core/server/services/members/members-api/services/{TokenService.js → token-service.js} +0 -0
- /package/core/server/services/members/{MembersConfigProvider.js → members-config-provider.js} +0 -0
- /package/core/server/services/members/{RequestIntegrityTokenProvider.js → request-integrity-token-provider.js} +0 -0
- /package/core/server/services/members/{SingleUseTokenProvider.js → single-use-token-provider.js} +0 -0
- /package/core/server/services/members/stats/{MembersStats.js → members-stats.js} +0 -0
- /package/core/server/services/members-events/{EventStorage.js → event-storage.js} +0 -0
- /package/core/server/services/members-events/{LastSeenAtCache.js → last-seen-at-cache.js} +0 -0
- /package/core/server/services/mentions/{MentionDiscoveryService.js → mention-discovery-service.js} +0 -0
- /package/core/server/services/mentions/{MentionSendingService.js → mention-sending-service.js} +0 -0
- /package/core/server/services/mentions-email-report/{StartMentionEmailReportJob.js → start-mention-email-report-job.js} +0 -0
- /package/core/server/services/milestones/{MilestoneCreatedEvent.js → milestone-created-event.js} +0 -0
- /package/core/server/services/milestones/{MilestoneQueries.js → milestone-queries.js} +0 -0
- /package/core/server/services/notifications/{Notifications.js → notifications.js} +0 -0
- /package/core/server/services/oembed/{NFTOEmbedProvider.js → nft-oembed-provider.js} +0 -0
- /package/core/server/services/oembed/{OEmbedService.js → oembed-service.js} +0 -0
- /package/core/server/services/oembed/{TwitterOEmbedProvider.js → twitter-oembed-provider.js} +0 -0
- /package/core/server/services/offers/domain/models/shared/{ValueObject.js → value-object.js} +0 -0
- /package/core/server/services/outbox/events/{StartOutboxProcessingEvent.js → start-outbox-processing-event.js} +0 -0
- /package/core/server/services/posts/{PostsExporter.js → posts-exporter.js} +0 -0
- /package/core/server/services/posts/stats/{PostStats.js → post-stats.js} +0 -0
- /package/core/server/services/recommendations/service/{BookshelfRepository.js → bookshelf-repository.js} +0 -0
- /package/core/server/services/recommendations/service/{BookshelfRepository.ts → bookshelf-repository.ts} +0 -0
- /package/core/server/services/recommendations/service/{ClickEvent.js → click-event.js} +0 -0
- /package/core/server/services/recommendations/service/{ClickEvent.ts → click-event.ts} +0 -0
- /package/core/server/services/recommendations/service/{IncomingRecommendationEmailRenderer.js → incoming-recommendation-email-renderer.js} +0 -0
- /package/core/server/services/recommendations/service/{IncomingRecommendationService.js → incoming-recommendation-service.js} +0 -0
- /package/core/server/services/recommendations/service/{RecommendationMetadataService.js → recommendation-metadata-service.js} +0 -0
- /package/core/server/services/recommendations/service/{RecommendationMetadataService.ts → recommendation-metadata-service.ts} +0 -0
- /package/core/server/services/recommendations/service/{RecommendationRepository.js → recommendation-repository.js} +0 -0
- /package/core/server/services/recommendations/service/{SubscribeEvent.js → subscribe-event.js} +0 -0
- /package/core/server/services/recommendations/service/{SubscribeEvent.ts → subscribe-event.ts} +0 -0
- /package/core/server/services/recommendations/service/{UnsafeData.js → unsafe-data.js} +0 -0
- /package/core/server/services/recommendations/service/{UnsafeData.ts → unsafe-data.ts} +0 -0
- /package/core/server/services/recommendations/service/{WellknownService.js → well-known-service.js} +0 -0
- /package/core/server/services/route-settings/{DefaultSettingsManager.js → default-settings-manager.js} +0 -0
- /package/core/server/services/route-settings/{RouteSettings.js → route-settings.js} +0 -0
- /package/core/server/services/route-settings/{SettingsLoader.js → settings-loader.js} +0 -0
- /package/core/server/services/route-settings/{SettingsPathManager.js → settings-path-manager.js} +0 -0
- /package/core/server/services/stats/{ContentStatsService.js → content-stats-service.js} +0 -0
- /package/core/server/services/stats/{MembersStatsService.js → members-stats-service.js} +0 -0
- /package/core/server/services/stats/{MrrStatsService.js → mrr-stats-service.js} +0 -0
- /package/core/server/services/stats/{SubscriptionStatsService.js → subscription-stats-service.js} +0 -0
- /package/core/server/services/stripe/events/{StripeLiveDisabledEvent.js → stripe-live-disabled-event.js} +0 -0
- /package/core/server/services/stripe/events/{StripeLiveEnabledEvent.js → stripe-live-enabled-event.js} +0 -0
- /package/core/server/services/stripe/services/webhook/{InvoiceEventService.js → invoice-event-service.js} +0 -0
- /package/core/server/services/stripe/services/webhook/{SubscriptionEventService.js → subscription-event-service.js} +0 -0
- /package/core/server/services/stripe/{StripeAPI.js → stripe-api.js} +0 -0
- /package/core/server/services/themes/{ThemeStorage.js → theme-storage.js} +0 -0
- /package/core/server/services/tinybird/{TinybirdService.js → tinybird-service.js} +0 -0
- /package/core/server/services/update-check/{UpdateCheckService.js → update-check-service.js} +0 -0
- /package/core/server/services/url/{LocalFileCache.js → local-file-cache.js} +0 -0
- /package/core/server/services/url/{Queue.js → queue.js} +0 -0
- /package/core/server/services/url/{Resource.js → resource.js} +0 -0
- /package/core/server/services/{Users.js → users.js} +0 -0
- /package/core/server/services/{VerificationTrigger.js → verification-trigger.js} +0 -0
- /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
|