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,2 +1,2 @@
1
- import{r as o,k as b,b as w,p as N,j as e,B as x,b0 as d,c9 as h,m as y,bG as k,bH as I,bI as B,bS as g,bB as Q,aO as E,X as F,bD as S,aQ as R,bu as z}from"./index-BYawr8p9.js";import{H as C,f as Y}from"./avatar-flipboard-uq7ptTxT.js";import{R as G}from"./reply-JE8tmvOn.js";import{R as M}from"./repeat-COP-3g8d.js";import{A as O}from"./a-large-small-CKZJgscl.js";import{I as W}from"./inbox-Bd0uf1Ez.js";import{H as V}from"./hash-CdH0ikFp.js";const L="/ghost/assets/avatar-casey-HhhTWg6d.png",U="/ghost/assets/avatar-creator-science-CBlOgcmP.png",H="/ghost/assets/cover-creator-science-C2MTxAZ7.png",D="/ghost/assets/avatar-evan-DMWltndD.png",J="data:image/png;base64,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",T="data:image/png;base64,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",K="/ghost/assets/cover-gone-C66KVDXu.png",Z="data:image/png;base64,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",P="/ghost/assets/cover-lever-CyLTy-uw.png",X="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAApCAYAAABHomvIAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAR7SURBVHgB7VhNaFxVFD7n3vfezJt5k58mY36akCFNKhoiFlQalFhcuJEusogLV25ciEhFXLgodAi4KK5EELty4UYIapGCIBSysO3G+IPUStU2Yts0TpPMT+bNy8y993jfJNWkmSTvzZiUlvlghsv9O9897957vnsAmmji/gKhceDaL71Nc7WeajQQBJy8YXQf/TqlvMIwJ2ISWQEYrjBTCfAYGhDJQqxUIlnCtgG7cHl6sqLNBiIXlKDfpzphKvVqNEv8MVKUlBW3JdH/umobHLeEhMeVgqd1x1ZUkCeufwCCkR5LkNX1JdJlEyEvdFkxKHMFrmGAUVxaubN0fWo2f+3936GGV4N5cHKSH8580M6SPSOeJ55HRcMgMSWVV0JVySCPtyNaRzSJLt8IbTZE26za72YwExeAiTOFSyc+zmQ+un1vPwMCwD4/1+uNVqZsAxzLMc6ZAr7N/PaZtzx32rWjw5Zz6OS43fnEIelBt287+L7xXYwmAGPCNK1aPQIR5Gg7CvgLxflr3xcL02eXZ9/N3W2rwI8QS73Roc0UwIOQYL4bi6RUGbGoavcIQlDEy9xsu1qa//ybjeTWMGYDNxKggs0VFsEnJcUYj5qwzwi1akJjT7y0E/bdYFg0CTaKJsFGEYKgjqD6HMM+YzuCm4goZzGrg1JOCS+3teulVVIVlyEo2ANsF+r8AF8lOTIyaf6Zi48iN5Is2ncQ+sZsp1JMALZSnHLuCiUdDq2PSAkW1AMFJjLgQBLDEKyib+xitBQfnGjvFCeMSOwZp2fCiSRGCVkkriNLiYD+PsAtzszkk2oV2qEeIMT1f0QRYyEJHuOIyV67t6tfZYq/Lv0y9VWk49hw68D4a7ICtl65JAZ57WuSZUiQVAcAt9jQrZUlsMyLzIIrnLRsUdrTuC7BNDktfW5IMC6g3ZkNSTDDQCy0Szm0JAp/fbL8x6mZFvHmS4m+8ZeFpwmumej+zxOslncIuXlLuplPU09d/hJmAOYgZRi2qI4WJQM7Cil5/DjI9BenFWwQxwEIRrVwRuFLNmWwNn8wsnhMey6vyxEIqoQioIrzF9RMesI3LPUbRRNJr5NI45wuz87+S2qLuA2kB7VeWyPDub9GBQEfPD6qylkVN4xJbzjt6V3nCX1RU/iHFhJZHOp8oDVDXaN4SAii/5IMfjD+T+xIkEjoJzAo1AmD9Zp9Fws7XDODyFr6TdOGTlRu2a+Rlfwd3CNRsB128OC0LN04e3P1Nqzy2MARp+eV8Uh89CgJiOmPHWxr6FyNlgExZsUC3be1sNNAuXj17ZvA5c9tj77zXOfomVNE2Kvjrg6p4EsPtp7iqJVP8fcCEuokEYHeJ6pur++6ssUr730nyfiw6/BbSe7As6seDOlBBe0bphNFRf3Bc75HOQNXIRQEA2lIWNHapOzXL18/dys/d/IHgPq2xm6bnm2cuG/s/EHPWxzi0lgE375luJbpZIWX5yRb3YWfXnTXZqyZXvPnCn0bhD2VbHOislq+K27vNXxfrqUmHjj8A4F7v5jglKPbAAAAAElFTkSuQmCC",q="/ghost/assets/cover-platformer-DAN_DMYF.png",$="/ghost/assets/cover-reader-B2WHT0Sl.png",_="data:image/png;base64,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",ee="/ghost/assets/cover-tangle-CBYOsPot.png",t=({children:s,selected:a})=>e.jsx("div",{className:`flex h-[30px] items-center gap-1.5 rounded-sm px-2 text-sm font-medium ${a?"bg-gray-100 text-black":"text-gray-700 dark:text-gray-600"}`,children:s}),n=({children:s,selected:a,onClick:r,onMouseEnter:l,onMouseLeave:i})=>e.jsx(x,{className:`h-auto rounded-full px-3 py-0.5 font-mono text-sm font-medium uppercase tracking-wide ${!a&&"bg-transparent text-gray-700 dark:text-gray-600"}`,onClick:r,onMouseEnter:l,onMouseLeave:i,children:s}),m=({selectedTab:s})=>e.jsxs("div",{className:"flex h-full flex-col gap-px border-l border-gray-200 pl-4 pt-4 dark:border-gray-900",children:[e.jsxs(t,{selected:s===1,children:[e.jsx(W,{size:16,strokeWidth:1.5})," Inbox"]}),e.jsxs(t,{selected:s===2,children:[e.jsx(V,{size:16,strokeWidth:1.5})," Feed"]}),e.jsxs(t,{children:[e.jsx(S,{size:16,strokeWidth:1.5})," Notifications"]}),e.jsxs(t,{children:[e.jsx(R,{size:16,strokeWidth:1.5})," Explore"]}),e.jsxs(t,{children:[e.jsx(g,{size:16,strokeWidth:1.5})," Profile"]}),e.jsx("div",{className:"mt-8",children:e.jsxs("div",{className:"inline-flex h-8 items-center gap-1.5 rounded-full bg-purple-500 pl-2 pr-3 text-sm font-medium text-white",children:[e.jsx(z,{size:16,strokeWidth:1.5})," New note"]})})]}),se=()=>{const s=[{avatar:_,publisher:"Tangle",title:"The Sunday — February 23",excerpt:"This is the Tangle Sunday Edition, a brief roundup of our independent politics coverage plus some extra features for your Sunday morning reading.",cover:ee},{avatar:U,publisher:"Creator Science",title:"A lesson from basketball's 3-point line",excerpt:`The NBA was formed in 1949 after the merger of the National Basketball League (founded in 1937) and the
1
+ import{r as o,k as b,b as w,p as N,j as e,B as x,b0 as d,c9 as h,m as y,bG as k,bH as I,bI as B,bS as g,bB as Q,aO as E,X as F,bD as S,aQ as R,bu as z}from"./index-CJU9a2PB.js";import{H as C,f as Y}from"./avatar-flipboard-C9-npfmZ.js";import{R as G}from"./reply-BvO85IDn.js";import{R as M}from"./repeat-ms5ocvE0.js";import{A as O}from"./a-large-small-BPPu_Iy7.js";import{I as W}from"./inbox-CRoP9sy5.js";import{H as V}from"./hash-p9dv0yuc.js";const L="/ghost/assets/avatar-casey-HhhTWg6d.png",U="/ghost/assets/avatar-creator-science-CBlOgcmP.png",H="/ghost/assets/cover-creator-science-C2MTxAZ7.png",D="/ghost/assets/avatar-evan-DMWltndD.png",J="data:image/png;base64,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",T="data:image/png;base64,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",K="/ghost/assets/cover-gone-C66KVDXu.png",Z="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAatSURBVHgBrVlrbBRVFD73zuzso93tlgptt3YpBcpLLPhIyivBAPERBEFrjMZIjBLiD0AQRRMNIQQUQdEYjPURQGNQBCRRSUiFJgQlUsJDnoVaoKQtz263ZXdnduZez51dSkvb7c4OX/pjZufeO9+ce+53HiWQId6oHJg9LiCNmjSSzB2YK01zKyTIGM8XzwglV6IqO3mjzTi099/4zuqTxtlfa0IhyADEyuDKykpp1VMHKsvKnZ/rrWxgLMSAcd73BHxEKQFnLgWHlzScPa6u3drYXLViBTBIE+kSJI27ggsDBdKGjktxhrMIWPw4QRb/WE7QQZtbjPcCsy+tSWca7W/A/g+LyvnR0pvZGluH5AQtapkcJGYQnBtujINbZav4kdKG31cXlaUxrW+EawYvcah8ndbOxD52/xh8GxgqcD0GRMkB0z5WwIHJPko1j7w0d8p/n4BVgurRkq3aef1ZdBa55+IGsI428FSsAcZioJ36FFeSIRMgAV0ZIv/mevjCnD6e90TkcMnOWL0+U6LQ+1vlHPDNPoEXSN+IQ2izG2hOEWQKg3E9e4SyXSlveOHuZz18sHX/4CV6QwpygtbNOuBaa+JGUkAumQmZuOVtSJTI0br4c637Bi+FVAT3rL1/uBLh6zlAyv2ivnyI1r6ZJMXBM+Er3PKrYAsEJJfGP96/vqi8T4IzZjj26O0sLY3SznyP3Li5MnUXAs0qhDREISXUMOOTpzlroDeCTbuC74bOxYOQ5ltodh5o9d8lDi9n4J74JW57B9iBkKHWOtXbuDO4qBtBVHZaWCCtptSCCSQXRA8uS8gNwUgReAK4GgU7vmguS4kUCEgbKitB6iT4YqBwflhECEvgwIkOxo1a04Li3jX+bVOC7KIduax8MvC8uDY/lx8qqQ9f0EstfzxajjgGgPfpIyZB0KMQ2uJFyQmAXfhKHdfIQw2D6Lypfr8W5qUZ7Qxazrh+Mik54uy7QQ5ON4nbhUhGXp11n5dOHsvKtFDm20J9BRA9tBjMzUCOngohOVfALmLIqWIIH0knjsmeyyx6H1AZ2K2WZHjjoJ39IeGHRJzuEiDOPLArOSL6TxrtnEvzcsijVreXha+A/6VbSBJzUKYD9d4H2rmqTsnxCMmJ25McgTwvnU49Ch0NVkEMM8T5X24FufgZJBqG6D/L70hO8Szg0QjYRZaLF1NM0wsgY6C1KjaCb+4RMDpioF/df0dyyhcmr22szkg+taeridyVestgwAIVI8vmzhPsfPB90xVsIVEyEPtHLpmsUtdAYJHL5j2Rs0AOTLYlOUiuhd5SeSPYAW4jNyLQ9lMQtLpvINZVciZW2cpyIho7RVvbWTXYgFa/CUKb/BhR0FKyC9T6Hcg5npAcXxmWAz7ISHLwA0XZSg+eUndQq36Y9P3wjlEQqX0LpAFFnTFYwlxRPb0h8QaR5Uz4wrSwVWDiAntPx3fSQ8foaZdfsjYZY21oi4JXUaCOrGRemARxQKx2JZhWQ/9TBlcCx/rFKpRcCaqPGWfpxpprHXIuvYZbkn5ZJsQ5K7+PzAUPiKKA3lzdKTnKAwusFX04VvHSBtGNMJ3jzFF1ERrBnmh1AVG8EDnweucJdo9fhZLTYmUJdu5IbK24MFf4YHfTz95ih7V9Tr0+RpfmhOTglxOHD+SCR9KWHB92H8rmN1d1Ety2DYwrTfHFWP7ZzzaToN5BEP3rtUT4Q5KeiV8j4ev9zjOw5BatEUgexW7nlx8d2ho+r2aoCz3BQk2Q80o7irbbfFXbj3mY6WRBCodkvqGOS2R8w5DbP3Qjsu/P9qnonPaKii6gOQWgHl+VuBGSU7EBz1Wsz/GyV6J/7NYe7/pbDzJhLJ7ZDeMjfHAPfJIAa78K/nmCVKJEDW3JQgUY0MtI0I186Z3cKRe79Wl6bKXvsYvr3cMcv4h2BNgGHhCXF+IXt5sUtLoqoB5fj1E6+r7oz9xNLkm8d4j+jGiB9Ndl6B+JV7BbN5FsFvqjs5uwo/zqzmHKdue4nn0ZgT4Pg0d0m9DkstccYkMjzTQbtzUXCCa5t8lhSs/R37mRJy/vi1xKggI+NHnN35ERvqHKJaxb7o2Qc7ObZfiHK221J4zxuehSqYanfWJFa0R0H7BDyoRBMkh0OeeEe4MybWqJLy6effmzdCZZfQ2t+7Zw/vBy5zJRS2uiiW7wlKtgQgwuP/byMN6LkCqilggMkCYy1jxR8E8YI42YMtY5R1SGboWOQROZ/4aQCGnp0IzLN8JQffCMtv3wZXJm47ZrGZV5/wN0wr1BUWYD7gAAAABJRU5ErkJggg==",P="/ghost/assets/cover-lever-CyLTy-uw.png",X="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAApCAYAAABHomvIAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAR7SURBVHgB7VhNaFxVFD7n3vfezJt5k58mY36akCFNKhoiFlQalFhcuJEusogLV25ciEhFXLgodAi4KK5EELty4UYIapGCIBSysO3G+IPUStU2Yts0TpPMT+bNy8y993jfJNWkmSTvzZiUlvlghsv9O9897957vnsAmmji/gKhceDaL71Nc7WeajQQBJy8YXQf/TqlvMIwJ2ISWQEYrjBTCfAYGhDJQqxUIlnCtgG7cHl6sqLNBiIXlKDfpzphKvVqNEv8MVKUlBW3JdH/umobHLeEhMeVgqd1x1ZUkCeufwCCkR5LkNX1JdJlEyEvdFkxKHMFrmGAUVxaubN0fWo2f+3936GGV4N5cHKSH8580M6SPSOeJ55HRcMgMSWVV0JVySCPtyNaRzSJLt8IbTZE26za72YwExeAiTOFSyc+zmQ+un1vPwMCwD4/1+uNVqZsAxzLMc6ZAr7N/PaZtzx32rWjw5Zz6OS43fnEIelBt287+L7xXYwmAGPCNK1aPQIR5Gg7CvgLxflr3xcL02eXZ9/N3W2rwI8QS73Roc0UwIOQYL4bi6RUGbGoavcIQlDEy9xsu1qa//ybjeTWMGYDNxKggs0VFsEnJcUYj5qwzwi1akJjT7y0E/bdYFg0CTaKJsFGEYKgjqD6HMM+YzuCm4goZzGrg1JOCS+3teulVVIVlyEo2ANsF+r8AF8lOTIyaf6Zi48iN5Is2ncQ+sZsp1JMALZSnHLuCiUdDq2PSAkW1AMFJjLgQBLDEKyib+xitBQfnGjvFCeMSOwZp2fCiSRGCVkkriNLiYD+PsAtzszkk2oV2qEeIMT1f0QRYyEJHuOIyV67t6tfZYq/Lv0y9VWk49hw68D4a7ICtl65JAZ57WuSZUiQVAcAt9jQrZUlsMyLzIIrnLRsUdrTuC7BNDktfW5IMC6g3ZkNSTDDQCy0Szm0JAp/fbL8x6mZFvHmS4m+8ZeFpwmumej+zxOslncIuXlLuplPU09d/hJmAOYgZRi2qI4WJQM7Cil5/DjI9BenFWwQxwEIRrVwRuFLNmWwNn8wsnhMey6vyxEIqoQioIrzF9RMesI3LPUbRRNJr5NI45wuz87+S2qLuA2kB7VeWyPDub9GBQEfPD6qylkVN4xJbzjt6V3nCX1RU/iHFhJZHOp8oDVDXaN4SAii/5IMfjD+T+xIkEjoJzAo1AmD9Zp9Fws7XDODyFr6TdOGTlRu2a+Rlfwd3CNRsB128OC0LN04e3P1Nqzy2MARp+eV8Uh89CgJiOmPHWxr6FyNlgExZsUC3be1sNNAuXj17ZvA5c9tj77zXOfomVNE2Kvjrg6p4EsPtp7iqJVP8fcCEuokEYHeJ6pur++6ssUr730nyfiw6/BbSe7As6seDOlBBe0bphNFRf3Bc75HOQNXIRQEA2lIWNHapOzXL18/dys/d/IHgPq2xm6bnm2cuG/s/EHPWxzi0lgE375luJbpZIWX5yRb3YWfXnTXZqyZXvPnCn0bhD2VbHOislq+K27vNXxfrqUmHjj8A4F7v5jglKPbAAAAAElFTkSuQmCC",q="/ghost/assets/cover-platformer-DAN_DMYF.png",$="/ghost/assets/cover-reader-B2WHT0Sl.png",_="data:image/png;base64,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",ee="/ghost/assets/cover-tangle-CBYOsPot.png",t=({children:s,selected:a})=>e.jsx("div",{className:`flex h-[30px] items-center gap-1.5 rounded-sm px-2 text-sm font-medium ${a?"bg-gray-100 text-black":"text-gray-700 dark:text-gray-600"}`,children:s}),n=({children:s,selected:a,onClick:r,onMouseEnter:l,onMouseLeave:i})=>e.jsx(x,{className:`h-auto rounded-full px-3 py-0.5 font-mono text-sm font-medium uppercase tracking-wide ${!a&&"bg-transparent text-gray-700 dark:text-gray-600"}`,onClick:r,onMouseEnter:l,onMouseLeave:i,children:s}),m=({selectedTab:s})=>e.jsxs("div",{className:"flex h-full flex-col gap-px border-l border-gray-200 pl-4 pt-4 dark:border-gray-900",children:[e.jsxs(t,{selected:s===1,children:[e.jsx(W,{size:16,strokeWidth:1.5})," Inbox"]}),e.jsxs(t,{selected:s===2,children:[e.jsx(V,{size:16,strokeWidth:1.5})," Feed"]}),e.jsxs(t,{children:[e.jsx(S,{size:16,strokeWidth:1.5})," Notifications"]}),e.jsxs(t,{children:[e.jsx(R,{size:16,strokeWidth:1.5})," Explore"]}),e.jsxs(t,{children:[e.jsx(g,{size:16,strokeWidth:1.5})," Profile"]}),e.jsx("div",{className:"mt-8",children:e.jsxs("div",{className:"inline-flex h-8 items-center gap-1.5 rounded-full bg-purple-500 pl-2 pr-3 text-sm font-medium text-white",children:[e.jsx(z,{size:16,strokeWidth:1.5})," New note"]})})]}),se=()=>{const s=[{avatar:_,publisher:"Tangle",title:"The Sunday — February 23",excerpt:"This is the Tangle Sunday Edition, a brief roundup of our independent politics coverage plus some extra features for your Sunday morning reading.",cover:ee},{avatar:U,publisher:"Creator Science",title:"A lesson from basketball's 3-point line",excerpt:`The NBA was formed in 1949 after the merger of the National Basketball League (founded in 1937) and the
2
2
  Basketball Association of America (founded in 1946).`,cover:H},{avatar:T,publisher:"Gone with the Wynns",title:"How far can our electric boat go?",excerpt:"Does an electric tender actually have the stamina needed to work for cruising life?  Until now, we honestly didn't know how long or far we could go with our electric jet propulsion. I guess we just haven't been...",cover:K},{avatar:X,publisher:"Platformer",title:"Manus of the hour",excerpt:"What the hype cycle around a new Chinese AI model tells us about the state of competition in agents",cover:q},{avatar:Z,publisher:"The Lever",title:"Is It Still Safe To Fly?",excerpt:"Aviation and antitrust expert Bill McGee breaks down recent airplane disasters and reveals the real risks to our airspace.",cover:P}];return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex w-full justify-between border-b border-gray-200 py-5 dark:border-gray-900",children:[e.jsx(d,{children:"Inbox"}),e.jsx("div",{className:"flex h-[30px] w-[232px] items-center rounded-full bg-gray-100 px-2 text-gray-400 dark:bg-gray-950",children:e.jsx(h,{size:16,strokeWidth:1.5})})]}),e.jsxs("div",{className:"grid h-full grid-cols-[auto_248px] gap-4",children:[e.jsx("div",{children:s.map(a=>e.jsxs("div",{className:"flex items-center justify-between gap-8 border-b border-gray-200 py-4 dark:border-gray-900",children:[e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-sm font-semibold",children:[e.jsx("div",{className:"size-4 rounded-full bg-cover bg-center bg-no-repeat",style:{backgroundImage:`url(${a.avatar})`}}),a.publisher]}),e.jsx("div",{className:"font-semibold",children:a.title}),e.jsx("div",{className:"text-sm text-gray-700 dark:text-gray-600",children:a.excerpt})]}),e.jsx("div",{children:e.jsx("div",{className:"h-20 w-[120px] min-w-[120px] rounded-sm bg-cover bg-center bg-no-repeat",style:{backgroundImage:`url(${a.cover})`}})})]},a.publisher))}),e.jsx(m,{selectedTab:1})]})]})},ae=()=>{const s=[{avatar:Y,publisher:"Flibboard",handle:"@flipboard@flipboard.social — 17m",post:e.jsxs("div",{children:[e.jsx("span",{className:"text-purple",children:"@newyorktimes's"})," veteran tech reporter ",e.jsx("span",{className:"text-purple",children:"@Markoff"})," interviewed some of ",e.jsx("span",{className:"text-purple",children:"#TeamFediverse"})," including our CEO ",e.jsx("span",{className:"text-purple",children:"@mike"}),' for a feature on the rise of decentralized social media. "It goes back to the original principles... ',e.jsx("span",{className:"text-purple",children:"Show more"})]}),likes:94,replies:12,reposts:71,liked:!1},{avatar:L,publisher:"Casey Newton",handle:"@caseynewton@mastodon.social — 2h",post:e.jsxs("div",{children:["This sucks. I met my wife on the basic HTML version of Gmail. ",e.jsx("span",{className:"text-purple",children:"techmeme.com/23092..."})]}),likes:118,replies:32,reposts:27,liked:!0},{avatar:D,publisher:"Evan Prodromou",handle:"@evan@cosocial.ca — 2h",post:e.jsxs("div",{children:["At #FediverseHouse, after ",e.jsx("span",{className:"text-purple",children:"@pluralistic"}),"'s talk, I came up and thanked him for speaking. We've never met before in person, so I asked if we could do a selfie."]}),likes:44,replies:20,reposts:14,liked:!0}],{data:a}=y("index","me");return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex w-full justify-between border-b border-gray-200 py-5 dark:border-gray-900",children:[e.jsx(d,{children:"Feed"}),e.jsx("div",{className:"flex h-[30px] w-[232px] items-center rounded-full bg-gray-100 px-2 text-gray-400 dark:bg-gray-950",children:e.jsx(h,{size:16,strokeWidth:1.5})})]}),e.jsxs("div",{className:"grid h-full grid-cols-[auto_248px] gap-4",children:[e.jsxs("div",{className:"mx-auto flex w-full max-w-[524px] flex-col items-center gap-4 pt-8",children:[e.jsxs("div",{className:"mb-5 flex w-full items-center gap-3 rounded-md bg-white p-3 text-gray-600 shadow-sm dark:bg-gray-950",children:[e.jsxs(k,{className:"size-9",children:[e.jsx(I,{src:a?.avatarUrl}),e.jsx(B,{children:e.jsx(g,{strokeWidth:1.5})})]}),"What's new?"]}),s.map(r=>e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex w-full items-start gap-3 px-3",children:[e.jsx("div",{className:"size-9 max-h-9 min-h-9 min-w-9 max-w-9 rounded-full bg-cover bg-center bg-no-repeat",style:{backgroundImage:`url(${r.avatar})`}}),e.jsxs("div",{className:"flex flex-col gap-3 text-sm",children:[e.jsxs("div",{className:"mt-0.5 flex flex-col gap-0.5",children:[e.jsx("div",{className:"font-semibold leading-tighter",children:r.publisher}),e.jsx("div",{className:"leading-tighter text-gray-700 dark:text-gray-600",children:r.handle})]}),e.jsx("div",{children:r.post}),e.jsxs("div",{className:"flex items-center gap-3 text-xs font-medium",children:[e.jsxs("div",{className:`flex items-center gap-1 ${r.liked&&"text-pink-500"}`,children:[e.jsx(Q,{size:14,strokeWidth:1.5}),r.likes]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(G,{size:14,strokeWidth:1.5}),r.likes]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(M,{size:14,strokeWidth:1.5}),r.likes]})]})]})]}),e.jsx(E,{})]}))]}),e.jsx(m,{selectedTab:2})]})]})},re=()=>e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"relative flex w-full items-center justify-center border-b border-gray-200 py-5 dark:border-gray-900",children:[e.jsxs("div",{className:"flex w-full max-w-[520px] items-center gap-3 text-sm",children:[e.jsx("div",{className:"size-9 max-h-9 min-h-9 min-w-9 max-w-9 rounded-full bg-cover bg-center bg-no-repeat",style:{backgroundImage:`url(${J})`}}),e.jsxs("div",{className:"mt-0.5 flex flex-col gap-0.5",children:[e.jsx("div",{className:"font-semibold leading-tighter",children:"404 Media"}),e.jsx("div",{className:"leading-tighter text-gray-700 dark:text-gray-600",children:"@index@404media.co — Yesterday"})]})]}),e.jsxs("div",{className:"absolute right-0 flex items-center gap-4 text-gray-500",children:[e.jsx(O,{size:28,strokeWidth:1}),e.jsx(F,{size:22,strokeWidth:1.15})]})]}),e.jsx("div",{className:"mt-8 flex w-full flex-col items-center",children:e.jsxs("div",{className:"flex w-full max-w-[610px] flex-col gap-5",children:[e.jsx(d,{className:"mx-auto max-w-[520px]",children:"Decentralized Social Media Is the Only Alternative to the Tech Oligarchy"}),e.jsx("div",{className:"h-[320px] w-full bg-cover bg-center bg-no-repeat",style:{backgroundImage:`url(${$})`}}),e.jsx("div",{className:"mx-auto max-w-[520px] font-serif text-lg",children:"The TikTok ban and Donald Trump's rise to power show how fragile our social media accounts are. We must normalize and invest in decentralized social media."}),e.jsx("div",{className:"mx-auto max-w-[520px] font-serif",children:"If it wasn’t already obvious, the last 72 hours have made it crystal clear that it is urgent to build and mainstream alternative, decentralized social media platforms that are resistant to government censorship and control, are not owned by oligarchs and dominated by their algorithms, and in which users own their follower list and can port it elsewhere easily and without restriction."})]})})]}),Ae=()=>{const[s,a]=o.useState(1),[r,l]=o.useState(!1),{setOnboarded:i}=b(),u=w(),{topicsQuery:p}=N(),{data:c}=p,v=c&&c.topics.length>0;o.useEffect(()=>{if(r)return;const j=setInterval(()=>{a(A=>A===3?1:A+1)},3e3);return()=>clearInterval(j)},[r]);const f=async()=>{await i(!0),u(v?"/explore":"/")};return e.jsxs("div",{className:"flex size-full max-h-screen flex-col gap-4 overflow-hidden px-14",children:[e.jsxs(C,{children:[e.jsxs("div",{className:"flex flex-col justify-between gap-4 text-xl font-medium",children:[e.jsx("h1",{className:"max-w-[680px]",children:"Find inspiration & follow what you love."}),e.jsx("div",{className:"flex max-w-[680px] flex-col gap-4",children:e.jsxs("p",{className:"tracking-tight text-gray-700 dark:text-gray-600",children:["Follow-back your community to connect with them directly, or subscribe to your peers for inspiration to fuel your next idea. You now have a native ",e.jsx("span",{className:"font-semibold text-black",children:"social web reader"})," inside Ghost for keeping track of your favourite creators across different platforms."]})})]}),e.jsx(x,{className:"min-w-60 bg-gradient-to-r from-purple-500 to-[#6A1AD6] hover:opacity-90 dark:text-white",size:"lg",onClick:f,children:"Next →"})]}),e.jsxs("div",{className:"mt-8 flex h-full max-h-[760px] flex-col items-stretch justify-end",children:[e.jsxs("div",{className:"flex items-center justify-center gap-2",onMouseEnter:()=>{l(!0)},onMouseLeave:()=>{l(!1)},children:[e.jsx(n,{selected:s===1,onClick:()=>{a(1)},children:"Long form content"}),e.jsx(n,{selected:s===2,onClick:()=>{a(2)},children:"Short form content"}),e.jsx(n,{selected:s===3,onClick:()=>{a(3)},children:"Integrated reader"})]}),e.jsxs("div",{className:"pointer-events-none relative -mx-14 mt-5 w-[calc(100%+112px)] overflow-y-hidden px-14",children:[e.jsxs("div",{className:"mx-auto h-[694px] w-full max-w-6xl overflow-hidden rounded-md bg-white shadow-xl dark:bg-[#101114]",children:[e.jsxs("div",{className:"flex h-5 w-full items-center gap-1.5 bg-gray-100 pl-2 dark:bg-gray-950",children:[e.jsx("div",{className:"size-2 rounded-full bg-gray-300"}),e.jsx("div",{className:"size-2 rounded-full bg-gray-300"}),e.jsx("div",{className:"size-2 rounded-full bg-gray-300"})]}),e.jsxs("div",{className:"h-full px-8",children:[s===1&&e.jsx(se,{}),s===2&&e.jsx(ae,{}),s===3&&e.jsx(re,{})]})]}),e.jsx("div",{className:"absolute inset-x-0 bottom-0 h-18 bg-gradient-to-t from-white via-[rgba(255,255,255,0.71)] to-[rgba(255,255,255,0)] dark:from-black dark:via-[rgba(0,0,0,0.71)] dark:to-[rgba(0,0,0,0)]"})]})]})]})};export{Ae as default};
@@ -1 +1 @@
1
- import{r as l,j as s,y as r,an as d,B as n}from"./index-BYawr8p9.js";const c=l.forwardRef(({className:a,...e},t)=>s.jsx("div",{className:"relative w-full",children:s.jsx("table",{ref:t,className:r("w-full caption-bottom text-sm",a),...e})}));c.displayName="Table";const i=l.forwardRef(({className:a,...e},t)=>s.jsx("thead",{ref:t,className:r("[&_tr:hover:before]:bg-transparent",a),...e}));i.displayName="TableHeader";const b=l.forwardRef(({className:a,...e},t)=>s.jsx("tbody",{ref:t,className:r("",a),...e}));b.displayName="TableBody";const m=l.forwardRef(({className:a,...e},t)=>s.jsx("tfoot",{ref:t,className:r("border-b bg-muted/50 font-medium [&>tr]:last:border-b-0",a),...e}));m.displayName="TableFooter";const x=l.forwardRef(({className:a,...e},t)=>s.jsx("tr",{ref:t,className:r("group relative border-b data-[state=selected]:bg-muted",a),...e}));x.displayName="TableRow";const p=d("relative align-middle",{variants:{variant:{default:"h-10 px-2 text-left text-xs font-medium uppercase tracking-wide text-gray-700 [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",cardhead:"text-base font-normal [&>div]:px-0"}},defaultVariants:{variant:"default"}}),f=l.forwardRef(({className:a,variant:e,...t},o)=>s.jsx("th",{ref:o,className:r(p({variant:e,className:a})),...t}));f.displayName="TableHead";const u=({className:a,children:e,...t})=>{const o=r("text-xs uppercase tracking-wide leading-4 text-right text-gray-700 hover:bg-transparent px-0 [&_svg]:size-4 gap-1",a);return s.jsx(n,{className:o,size:"sm",variant:"ghost",...t,children:e})};u.displayName="TableHeadButton";const g=l.forwardRef(({className:a,...e},t)=>s.jsx("td",{ref:t,className:r("relative p-2.5 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px] group-hover:bg-muted/50",a),...e}));g.displayName="TableCell";const N=l.forwardRef(({className:a,...e},t)=>s.jsx("caption",{ref:t,className:r("mt-4 text-sm text-muted-foreground",a),...e}));N.displayName="TableCaption";export{u as T,c as a,i as b,x as c,f as d,b as e,g as f,m as g};
1
+ import{r as l,j as s,y as r,an as d,B as n}from"./index-CJU9a2PB.js";const c=l.forwardRef(({className:a,...e},t)=>s.jsx("div",{className:"relative w-full",children:s.jsx("table",{ref:t,className:r("w-full caption-bottom text-sm",a),...e})}));c.displayName="Table";const i=l.forwardRef(({className:a,...e},t)=>s.jsx("thead",{ref:t,className:r("[&_tr:hover:before]:bg-transparent",a),...e}));i.displayName="TableHeader";const b=l.forwardRef(({className:a,...e},t)=>s.jsx("tbody",{ref:t,className:r("",a),...e}));b.displayName="TableBody";const m=l.forwardRef(({className:a,...e},t)=>s.jsx("tfoot",{ref:t,className:r("border-b bg-muted/50 font-medium [&>tr]:last:border-b-0",a),...e}));m.displayName="TableFooter";const x=l.forwardRef(({className:a,...e},t)=>s.jsx("tr",{ref:t,className:r("group relative border-b data-[state=selected]:bg-muted",a),...e}));x.displayName="TableRow";const p=d("relative align-middle",{variants:{variant:{default:"h-10 px-2 text-left text-xs font-medium uppercase tracking-wide text-gray-700 [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",cardhead:"text-base font-normal [&>div]:px-0"}},defaultVariants:{variant:"default"}}),f=l.forwardRef(({className:a,variant:e,...t},o)=>s.jsx("th",{ref:o,className:r(p({variant:e,className:a})),...t}));f.displayName="TableHead";const u=({className:a,children:e,...t})=>{const o=r("text-xs uppercase tracking-wide leading-4 text-right text-gray-700 hover:bg-transparent px-0 [&_svg]:size-4 gap-1",a);return s.jsx(n,{className:o,size:"sm",variant:"ghost",...t,children:e})};u.displayName="TableHeadButton";const g=l.forwardRef(({className:a,...e},t)=>s.jsx("td",{ref:t,className:r("relative p-2.5 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px] group-hover:bg-muted/50",a),...e}));g.displayName="TableCell";const N=l.forwardRef(({className:a,...e},t)=>s.jsx("caption",{ref:t,className:r("mt-4 text-sm text-muted-foreground",a),...e}));N.displayName="TableCaption";export{u as T,c as a,i as b,x as c,f as d,b as e,g as f,m as g};
@@ -1 +1 @@
1
- import{r as n,j as t,y as d,an as u,ao as N,B as j,ap as T}from"./index-BYawr8p9.js";import{R as c,L as p,T as m,C as f}from"./index-Kji6JKl7.js";import{L as w}from"./lucide-react-DKlmxVQI.js";import{T as k}from"./wallet-cards-KaTkgqvi.js";const i=n.createContext("segmented"),C=n.forwardRef(({variant:e="segmented",...a},r)=>t.jsx(i.Provider,{value:e,children:t.jsx(c,{ref:r,...a})}));C.displayName=c.displayName;const R=u("inline-flex items-center text-muted-foreground",{variants:{variant:{segmented:"h-[34px] rounded-lg bg-muted px-[3px]","segmented-sm":"h-8 rounded-lg bg-muted px-[3px]",button:"gap-2","button-sm":"gap-1",underline:"w-full gap-5 border-b border-b-gray-200 dark:border-gray-950",navbar:"h-[52px] items-end gap-6",pill:"-ml-0.5 h-[30px] gap-px",kpis:"border-b ring-0"}},defaultVariants:{variant:"segmented"}}),z=n.forwardRef(({className:e,...a},r)=>{const s=n.useContext(i);return t.jsx(p,{ref:r,className:d(R({variant:s,className:e})),...a})});z.displayName=p.displayName;const b=u("inline-flex items-center justify-center whitespace-nowrap px-3 py-1 ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{segmented:"h-7 rounded-md text-sm font-medium data-[state=active]:shadow-md","segmented-sm":"h-[26px] rounded-md text-xs font-medium data-[state=active]:shadow-md",button:"h-[34px] gap-1.5 rounded-md py-2 text-sm font-normal hover:bg-muted data-[state=active]:bg-muted-foreground/10 data-[state=active]:font-medium","button-sm":"h-6 gap-1.5 rounded-md p-2 text-xs font-normal text-gray-800 hover:bg-muted data-[state=active]:bg-muted-foreground/10 data-[state=active]:font-medium data-[state=active]:text-foreground",underline:'relative h-[36px] px-0 text-md font-semibold text-gray-700 after:absolute after:inset-x-0 after:bottom-[-1px] after:h-0.5 after:bg-foreground after:opacity-0 after:content-[""] hover:after:opacity-10 data-[state=active]:bg-transparent data-[state=active]:text-foreground data-[state=active]:after:!opacity-100',navbar:'relative h-[52px] px-px text-md font-semibold text-muted-foreground after:absolute after:inset-x-0 after:-bottom-px after:h-0.5 after:bg-foreground after:opacity-0 after:content-[""] hover:text-foreground data-[state=active]:bg-transparent data-[state=active]:text-foreground data-[state=active]:after:!opacity-100',pill:"relative h-[30px] rounded-md px-3 text-md font-medium text-gray-800 hover:text-foreground data-[state=active]:bg-muted-foreground/10 data-[state=active]:font-semibold data-[state=active]:text-foreground dark:text-gray-500 dark:data-[state=active]:text-foreground",kpis:'relative !h-full !items-start rounded-none border-border bg-transparent px-6 py-5 text-foreground ring-0 transition-all after:absolute after:inset-x-0 after:-bottom-px after:h-0.5 after:bg-foreground after:opacity-0 after:content-[""] first:rounded-tl-md last:rounded-tr-md hover:bg-accent/50 data-[state=active]:bg-transparent data-[state=active]:after:opacity-100 [&:not(:last-child)]:border-r [&[data-state=active]_[data-type="value"]]:text-foreground'}},defaultVariants:{variant:"segmented"}}),v=n.forwardRef(({className:e,...a},r)=>{const s=n.useContext(i);return t.jsx(m,{ref:r,className:d(b({variant:s,className:e})),...a})});v.displayName=m.displayName;const V=({className:e="",children:a})=>t.jsx("span",{className:`ml-1.5 mt-px flex h-5 items-center justify-center rounded-full bg-gray-200 px-1.5 py-0 text-xs font-semibold leading-[21px] text-gray-800 dark:bg-gray-900 dark:text-gray-300 ${e}`,children:a});V.displayName="TabsTriggerCount";const L=u("ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",{variants:{variant:{segmented:"","segmented-sm":"",button:"","button-sm":"",underline:"",navbar:"",pill:"",kpis:"ring-0"}},defaultVariants:{variant:"segmented"}}),K=n.forwardRef(({className:e,...a},r)=>{const s=n.useContext(i);return t.jsx(f,{ref:r,className:d(L({variant:s,className:e})),...a})});K.displayName=f.displayName;const F=({children:e,...a})=>t.jsx(v,{className:"h-auto",...a,children:e}),M=({color:e,icon:a,label:r,value:s,diffDirection:o,diffValue:l,className:h,"data-testid":g})=>{const x=a?w[a]:null,y=d("flex items-center gap-1 text-xs h-[22px] px-1.5 rounded-sm group/diff cursor-default mt-0.5",o==="up"&&"text-green-600 bg-green/10",o==="down"&&"text-red-600 bg-red/10",o==="same"&&"text-gray-700 bg-muted");return t.jsxs("div",{className:d("group flex w-full flex-col items-start gap-2",h),children:[t.jsxs("div",{className:"flex h-[22px] items-center gap-1.5 text-base font-medium text-muted-foreground transition-all group-hover:text-foreground","data-type":"value",children:[e&&t.jsx("div",{className:"ml-1 size-2 rounded-full opacity-50",style:{backgroundColor:e}}),x&&t.jsx(x,{size:16,strokeWidth:1.5}),r]}),t.jsxs("div",{className:"flex flex-col items-start gap-2 lg:flex-row xl:gap-3",children:[t.jsx("div",{className:"text-[2.3rem] font-semibold leading-none tracking-tighter xl:text-[2.6rem]","data-testid":g,children:s}),o&&o!=="hidden"&&t.jsx(t.Fragment,{children:t.jsxs("div",{className:y,"data-testid":g?`${g}-diff`:void 0,children:[t.jsx("span",{className:"font-medium leading-none",children:l}),o==="up"&&t.jsx(N,{className:"!size-[12px]",size:14,strokeWidth:2}),o==="down"&&t.jsx(k,{className:"!size-[12px]",size:14,strokeWidth:2})]})})]})]})},B=n.forwardRef(({variant:e="dropdown",className:a,...r},s)=>t.jsx(j,{ref:s,className:d("h-auto w-full rounded-none border-x-0 border-t-0 focus-visible:ring-0 bg-transparent py-5",a),variant:e,...r}));B.displayName="KpiDropdownButton";const W=n.forwardRef(({children:e,className:a,...r},s)=>{const o=n.useContext(i);return t.jsxs("div",{className:"relative rounded-md hover:bg-muted",children:[t.jsx(m,{ref:s,className:d(b({variant:o,className:a})),...r,children:t.jsx("div",{className:"flex items-center gap-2",children:e})}),t.jsx(T,{className:"absolute inset-0 size-full cursor-pointer",onClick:l=>{l.preventDefault()}})]})});W.displayName="TabsDropdownTrigger";export{F as K,C as T,z as a,v as b,K as c,M as d,B as e,V as f};
1
+ import{r as n,j as t,y as d,an as u,ao as N,B as j,ap as T}from"./index-CJU9a2PB.js";import{R as c,L as p,T as m,C as f}from"./index-6syrC9X1.js";import{L as w}from"./lucide-react-B7UnD_Dp.js";import{T as k}from"./wallet-cards-Do7nPf3f.js";const i=n.createContext("segmented"),C=n.forwardRef(({variant:e="segmented",...a},r)=>t.jsx(i.Provider,{value:e,children:t.jsx(c,{ref:r,...a})}));C.displayName=c.displayName;const R=u("inline-flex items-center text-muted-foreground",{variants:{variant:{segmented:"h-[34px] rounded-lg bg-muted px-[3px]","segmented-sm":"h-8 rounded-lg bg-muted px-[3px]",button:"gap-2","button-sm":"gap-1",underline:"w-full gap-5 border-b border-b-gray-200 dark:border-gray-950",navbar:"h-[52px] items-end gap-6",pill:"-ml-0.5 h-[30px] gap-px",kpis:"border-b ring-0"}},defaultVariants:{variant:"segmented"}}),z=n.forwardRef(({className:e,...a},r)=>{const s=n.useContext(i);return t.jsx(p,{ref:r,className:d(R({variant:s,className:e})),...a})});z.displayName=p.displayName;const b=u("inline-flex items-center justify-center whitespace-nowrap px-3 py-1 ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{segmented:"h-7 rounded-md text-sm font-medium data-[state=active]:shadow-md","segmented-sm":"h-[26px] rounded-md text-xs font-medium data-[state=active]:shadow-md",button:"h-[34px] gap-1.5 rounded-md py-2 text-sm font-normal hover:bg-muted data-[state=active]:bg-muted-foreground/10 data-[state=active]:font-medium","button-sm":"h-6 gap-1.5 rounded-md p-2 text-xs font-normal text-gray-800 hover:bg-muted data-[state=active]:bg-muted-foreground/10 data-[state=active]:font-medium data-[state=active]:text-foreground",underline:'relative h-[36px] px-0 text-md font-semibold text-gray-700 after:absolute after:inset-x-0 after:bottom-[-1px] after:h-0.5 after:bg-foreground after:opacity-0 after:content-[""] hover:after:opacity-10 data-[state=active]:bg-transparent data-[state=active]:text-foreground data-[state=active]:after:!opacity-100',navbar:'relative h-[52px] px-px text-md font-semibold text-muted-foreground after:absolute after:inset-x-0 after:-bottom-px after:h-0.5 after:bg-foreground after:opacity-0 after:content-[""] hover:text-foreground data-[state=active]:bg-transparent data-[state=active]:text-foreground data-[state=active]:after:!opacity-100',pill:"relative h-[30px] rounded-md px-3 text-md font-medium text-gray-800 hover:text-foreground data-[state=active]:bg-muted-foreground/10 data-[state=active]:font-semibold data-[state=active]:text-foreground dark:text-gray-500 dark:data-[state=active]:text-foreground",kpis:'relative !h-full !items-start rounded-none border-border bg-transparent px-6 py-5 text-foreground ring-0 transition-all after:absolute after:inset-x-0 after:-bottom-px after:h-0.5 after:bg-foreground after:opacity-0 after:content-[""] first:rounded-tl-md last:rounded-tr-md hover:bg-accent/50 data-[state=active]:bg-transparent data-[state=active]:after:opacity-100 [&:not(:last-child)]:border-r [&[data-state=active]_[data-type="value"]]:text-foreground'}},defaultVariants:{variant:"segmented"}}),v=n.forwardRef(({className:e,...a},r)=>{const s=n.useContext(i);return t.jsx(m,{ref:r,className:d(b({variant:s,className:e})),...a})});v.displayName=m.displayName;const V=({className:e="",children:a})=>t.jsx("span",{className:`ml-1.5 mt-px flex h-5 items-center justify-center rounded-full bg-gray-200 px-1.5 py-0 text-xs font-semibold leading-[21px] text-gray-800 dark:bg-gray-900 dark:text-gray-300 ${e}`,children:a});V.displayName="TabsTriggerCount";const L=u("ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",{variants:{variant:{segmented:"","segmented-sm":"",button:"","button-sm":"",underline:"",navbar:"",pill:"",kpis:"ring-0"}},defaultVariants:{variant:"segmented"}}),K=n.forwardRef(({className:e,...a},r)=>{const s=n.useContext(i);return t.jsx(f,{ref:r,className:d(L({variant:s,className:e})),...a})});K.displayName=f.displayName;const F=({children:e,...a})=>t.jsx(v,{className:"h-auto",...a,children:e}),M=({color:e,icon:a,label:r,value:s,diffDirection:o,diffValue:l,className:h,"data-testid":g})=>{const x=a?w[a]:null,y=d("flex items-center gap-1 text-xs h-[22px] px-1.5 rounded-sm group/diff cursor-default mt-0.5",o==="up"&&"text-green-600 bg-green/10",o==="down"&&"text-red-600 bg-red/10",o==="same"&&"text-gray-700 bg-muted");return t.jsxs("div",{className:d("group flex w-full flex-col items-start gap-2",h),children:[t.jsxs("div",{className:"flex h-[22px] items-center gap-1.5 text-base font-medium text-muted-foreground transition-all group-hover:text-foreground","data-type":"value",children:[e&&t.jsx("div",{className:"ml-1 size-2 rounded-full opacity-50",style:{backgroundColor:e}}),x&&t.jsx(x,{size:16,strokeWidth:1.5}),r]}),t.jsxs("div",{className:"flex flex-col items-start gap-2 lg:flex-row xl:gap-3",children:[t.jsx("div",{className:"text-[2.3rem] font-semibold leading-none tracking-tighter xl:text-[2.6rem]","data-testid":g,children:s}),o&&o!=="hidden"&&t.jsx(t.Fragment,{children:t.jsxs("div",{className:y,"data-testid":g?`${g}-diff`:void 0,children:[t.jsx("span",{className:"font-medium leading-none",children:l}),o==="up"&&t.jsx(N,{className:"!size-[12px]",size:14,strokeWidth:2}),o==="down"&&t.jsx(k,{className:"!size-[12px]",size:14,strokeWidth:2})]})})]})]})},B=n.forwardRef(({variant:e="dropdown",className:a,...r},s)=>t.jsx(j,{ref:s,className:d("h-auto w-full rounded-none border-x-0 border-t-0 focus-visible:ring-0 bg-transparent py-5",a),variant:e,...r}));B.displayName="KpiDropdownButton";const W=n.forwardRef(({children:e,className:a,...r},s)=>{const o=n.useContext(i);return t.jsxs("div",{className:"relative rounded-md hover:bg-muted",children:[t.jsx(m,{ref:s,className:d(b({variant:o,className:a})),...r,children:t.jsx("div",{className:"flex items-center gap-2",children:e})}),t.jsx(T,{className:"absolute inset-0 size-full cursor-pointer",onClick:l=>{l.preventDefault()}})]})});W.displayName="TabsDropdownTrigger";export{F as K,C as T,z as a,v as b,K as c,M as d,B as e,V as f};
@@ -1 +1 @@
1
- import{j as e,y as T,z as j,B as g,r as N,aj as y,ak as P,c2 as R,f as I}from"./index-BYawr8p9.js";import{T as z,a as b}from"./toggle-group-B2X-8giI.js";import{H as o,u as C}from"./use-infinite-virtual-scroll-BHH7oscK.js";import{M as L}from"./main-layout-Cl09wG7F.js";import{a as E,b as S,c as m,d,e as $,f as c}from"./table-DeBuf80X.js";import{P as k,T as B}from"./tags-BL_N4nn2.js";import{E as _}from"./empty-indicator-DBrIZcFq.js";const A=({children:a,className:s,...t})=>e.jsx("section",{className:T("flex gap-6 flex-col p-4 lg:p-8 size-full grow",s),...t,children:a}),H=({currentTab:a})=>e.jsxs(o,{variant:"inline-nav",children:[e.jsx(o.Title,{children:"Tags"}),e.jsxs(o.Actions,{children:[e.jsx(o.ActionGroup,{children:e.jsxs(z,{"data-testid":"tags-header-tabs",size:"button",type:"single",value:a,children:[e.jsx(b,{"aria-label":"Public tags",value:"public",asChild:!0,children:e.jsx(j,{to:"/tags",children:"Public tags"})}),e.jsx(b,{"aria-label":"Internal tags",value:"internal",asChild:!0,children:e.jsx(j,{to:"/tags?type=internal",children:"Internal tags"})})]})}),e.jsx(o.ActionGroup,{children:e.jsx(g,{asChild:!0,children:e.jsx("a",{className:"font-bold",href:"#/tags/new",children:"New tag"})})})]})]}),G=({children:a})=>e.jsx(L,{children:e.jsx("div",{className:"grid w-full grow",children:e.jsx("div",{className:"flex h-full flex-col","data-testid":"tags-page",children:a})})}),w=({height:a})=>e.jsx("tr",{"aria-hidden":"true",className:"flex lg:table-row",children:e.jsx("td",{className:"flex lg:table-cell",style:{height:a}})}),M=N.forwardRef(function(s,t){return e.jsx(m,{ref:t,...s,"aria-hidden":"true",className:"relative flex flex-col lg:table-row",children:e.jsx(c,{className:"relative z-10 h-24 animate-pulse",children:e.jsx("div",{className:"h-full rounded-md bg-muted","data-testid":"loading-placeholder"})})})});function q({items:a,totalItems:s,hasNextPage:t,isFetchingNextPage:l,fetchNextPage:n}){const i=N.useRef(null),{visibleItems:x,spaceBefore:u,spaceAfter:h}=C({items:a,totalItems:s,hasNextPage:t,isFetchingNextPage:l,fetchNextPage:n,parentRef:i});return e.jsx("div",{ref:i,className:"overflow-hidden",children:e.jsxs(E,{className:"flex table-fixed flex-col lg:table","data-testid":"tags-list",children:[e.jsx(S,{className:"hidden lg:!visible lg:!table-header-group",children:e.jsxs(m,{children:[e.jsx(d,{className:"w-auto px-4",children:"Tag"}),e.jsx(d,{className:"w-1/5 px-4",children:"Slug"}),e.jsx(d,{className:"w-1/5 px-4",children:"No. of posts"}),e.jsx(d,{className:"w-20 px-4"})]})}),e.jsxs($,{className:"flex flex-col lg:table-row-group",children:[e.jsx(w,{height:u}),x.map(({key:p,virtualItem:v,item:r,props:f})=>v.index>a.length-1?e.jsx(M,{...f},p):e.jsxs(m,{...f,className:"grid w-full grid-cols-[1fr_5rem] items-center gap-x-4 p-2 hover:bg-muted/50 md:grid-cols-[1fr_auto_5rem] lg:table-row lg:p-0 [&.group:hover_td]:bg-transparent","data-testid":"tag-list-row",children:[e.jsxs(c,{className:"static col-start-1 col-end-1 row-start-1 row-end-1 flex min-w-0 flex-col p-0 md:relative lg:table-cell lg:w-1/2 lg:p-4 xl:w-3/5",children:[e.jsx("a",{className:"before:absolute before:left-0 before:top-0 before:z-10 before:h-full before:w-[100vw]",href:`#/tags/${r.slug}`,children:e.jsx("span",{className:"block truncate pb-1 text-lg font-medium",children:r.name})}),e.jsx("span",{className:"block truncate text-muted-foreground",children:r.description})]}),e.jsx(c,{className:"col-start-1 col-end-1 row-start-2 row-end-2 flex p-0 lg:table-cell lg:p-4",children:e.jsx("span",{className:"block truncate",children:r.slug})}),e.jsx(c,{className:"col-start-1 col-end-1 row-start-3 row-end-3 flex p-0 md:col-start-2 md:col-end-2 md:row-start-1 md:row-end-3 lg:table-cell lg:p-4",children:r.count?.posts?e.jsx("a",{className:"relative z-10 -m-4 inline-block p-4 hover:underline",href:`#/posts?tag=${r.slug}`,children:`${y(r.count?.posts)} ${r.count?.posts===1?"post":"posts"}`}):e.jsx("span",{className:"text-muted-foreground",children:"0 posts"})}),e.jsx(c,{className:"col-start-2 col-end-2 row-start-1 row-end-3 p-0 md:col-start-3 md:col-end-3 lg:table-cell lg:p-4",children:e.jsx(g,{"aria-hidden":"true",className:"w-12",size:"icon",tabIndex:-1,variant:"outline",children:e.jsx(k,{})})})]},p)),e.jsx(w,{height:h})]})]})})}const Q="TagsResponseType",D=P({dataType:Q,path:"/tags/",defaultNextPageParams:(a,s)=>{var t,l;return(t=a.meta)!=null&&t.pagination.next?{...s,page:(((l=a.meta)==null?void 0:l.pagination.next)||1).toString()}:void 0},returnData:a=>{const{pages:s}=a,t=s.flatMap(n=>n.tags),l=s[s.length-1].meta;return{tags:t,meta:l,isEnd:l?l.pagination.pages===l.pagination.page:!0}}}),F=({filter:a,...s})=>{const t=Object.entries(a).map(([l,n])=>`${l}:${n}`).join(",");return D({...s,searchParams:{limit:"100",order:"name asc",include:"count.posts",filter:t,...s.searchParams}})},Z=()=>{const{search:a}=R(),t=new URLSearchParams(a).get("type")??"public",{data:l,isError:n,isLoading:i,isFetchingNextPage:x,fetchNextPage:u,hasNextPage:h}=F({filter:{visibility:t}});return e.jsxs(G,{children:[e.jsx(H,{currentTab:t}),e.jsx(A,{children:i?e.jsx("div",{className:"flex h-full items-center justify-center",children:e.jsx(I,{size:"lg"})}):n?e.jsxs("div",{className:"mb-16 flex h-full flex-col items-center justify-center",children:[e.jsx("h2",{className:"mb-2 text-xl font-medium",children:"Error loading tags"}),e.jsx("p",{className:"mb-4 text-muted-foreground",children:"Please reload the page to try again"}),e.jsx(g,{onClick:()=>window.location.reload(),children:"Reload page"})]}):l?.tags.length?e.jsx(q,{fetchNextPage:u,hasNextPage:h,isFetchingNextPage:x,items:l?.tags??[],totalItems:l?.meta?.pagination?.total??0}):e.jsx("div",{className:"flex h-full items-center justify-center",children:e.jsx(_,{actions:e.jsx(g,{asChild:!0,children:e.jsx("a",{href:"#/tags/new",children:"Create a new tag"})}),title:"Start organizing your content",children:e.jsx(B,{})})})})]})};export{Z as default};
1
+ import{j as e,y as T,z as j,B as g,r as N,aj as y,ak as P,c2 as R,f as I}from"./index-CJU9a2PB.js";import{T as z,a as b}from"./toggle-group-CqDO3Kkx.js";import{H as o,u as C}from"./use-infinite-virtual-scroll-BjATkxBj.js";import{M as L}from"./main-layout-9nmU5WlG.js";import{a as E,b as S,c as m,d,e as $,f as c}from"./table-mjAkKNdb.js";import{P as k,T as B}from"./tags-DXDZbfxp.js";import{E as _}from"./empty-indicator-BXWniwsl.js";const A=({children:a,className:s,...t})=>e.jsx("section",{className:T("flex gap-6 flex-col p-4 lg:p-8 size-full grow",s),...t,children:a}),H=({currentTab:a})=>e.jsxs(o,{variant:"inline-nav",children:[e.jsx(o.Title,{children:"Tags"}),e.jsxs(o.Actions,{children:[e.jsx(o.ActionGroup,{children:e.jsxs(z,{"data-testid":"tags-header-tabs",size:"button",type:"single",value:a,children:[e.jsx(b,{"aria-label":"Public tags",value:"public",asChild:!0,children:e.jsx(j,{to:"/tags",children:"Public tags"})}),e.jsx(b,{"aria-label":"Internal tags",value:"internal",asChild:!0,children:e.jsx(j,{to:"/tags?type=internal",children:"Internal tags"})})]})}),e.jsx(o.ActionGroup,{children:e.jsx(g,{asChild:!0,children:e.jsx("a",{className:"font-bold",href:"#/tags/new",children:"New tag"})})})]})]}),G=({children:a})=>e.jsx(L,{children:e.jsx("div",{className:"grid w-full grow",children:e.jsx("div",{className:"flex h-full flex-col","data-testid":"tags-page",children:a})})}),w=({height:a})=>e.jsx("tr",{"aria-hidden":"true",className:"flex lg:table-row",children:e.jsx("td",{className:"flex lg:table-cell",style:{height:a}})}),M=N.forwardRef(function(s,t){return e.jsx(m,{ref:t,...s,"aria-hidden":"true",className:"relative flex flex-col lg:table-row",children:e.jsx(c,{className:"relative z-10 h-24 animate-pulse",children:e.jsx("div",{className:"h-full rounded-md bg-muted","data-testid":"loading-placeholder"})})})});function q({items:a,totalItems:s,hasNextPage:t,isFetchingNextPage:l,fetchNextPage:n}){const i=N.useRef(null),{visibleItems:x,spaceBefore:u,spaceAfter:h}=C({items:a,totalItems:s,hasNextPage:t,isFetchingNextPage:l,fetchNextPage:n,parentRef:i});return e.jsx("div",{ref:i,className:"overflow-hidden",children:e.jsxs(E,{className:"flex table-fixed flex-col lg:table","data-testid":"tags-list",children:[e.jsx(S,{className:"hidden lg:!visible lg:!table-header-group",children:e.jsxs(m,{children:[e.jsx(d,{className:"w-auto px-4",children:"Tag"}),e.jsx(d,{className:"w-1/5 px-4",children:"Slug"}),e.jsx(d,{className:"w-1/5 px-4",children:"No. of posts"}),e.jsx(d,{className:"w-20 px-4"})]})}),e.jsxs($,{className:"flex flex-col lg:table-row-group",children:[e.jsx(w,{height:u}),x.map(({key:p,virtualItem:v,item:r,props:f})=>v.index>a.length-1?e.jsx(M,{...f},p):e.jsxs(m,{...f,className:"grid w-full grid-cols-[1fr_5rem] items-center gap-x-4 p-2 hover:bg-muted/50 md:grid-cols-[1fr_auto_5rem] lg:table-row lg:p-0 [&.group:hover_td]:bg-transparent","data-testid":"tag-list-row",children:[e.jsxs(c,{className:"static col-start-1 col-end-1 row-start-1 row-end-1 flex min-w-0 flex-col p-0 md:relative lg:table-cell lg:w-1/2 lg:p-4 xl:w-3/5",children:[e.jsx("a",{className:"before:absolute before:left-0 before:top-0 before:z-10 before:h-full before:w-[100vw]",href:`#/tags/${r.slug}`,children:e.jsx("span",{className:"block truncate pb-1 text-lg font-medium",children:r.name})}),e.jsx("span",{className:"block truncate text-muted-foreground",children:r.description})]}),e.jsx(c,{className:"col-start-1 col-end-1 row-start-2 row-end-2 flex p-0 lg:table-cell lg:p-4",children:e.jsx("span",{className:"block truncate",children:r.slug})}),e.jsx(c,{className:"col-start-1 col-end-1 row-start-3 row-end-3 flex p-0 md:col-start-2 md:col-end-2 md:row-start-1 md:row-end-3 lg:table-cell lg:p-4",children:r.count?.posts?e.jsx("a",{className:"relative z-10 -m-4 inline-block p-4 hover:underline",href:`#/posts?tag=${r.slug}`,children:`${y(r.count?.posts)} ${r.count?.posts===1?"post":"posts"}`}):e.jsx("span",{className:"text-muted-foreground",children:"0 posts"})}),e.jsx(c,{className:"col-start-2 col-end-2 row-start-1 row-end-3 p-0 md:col-start-3 md:col-end-3 lg:table-cell lg:p-4",children:e.jsx(g,{"aria-hidden":"true",className:"w-12",size:"icon",tabIndex:-1,variant:"outline",children:e.jsx(k,{})})})]},p)),e.jsx(w,{height:h})]})]})})}const Q="TagsResponseType",D=P({dataType:Q,path:"/tags/",defaultNextPageParams:(a,s)=>{var t,l;return(t=a.meta)!=null&&t.pagination.next?{...s,page:(((l=a.meta)==null?void 0:l.pagination.next)||1).toString()}:void 0},returnData:a=>{const{pages:s}=a,t=s.flatMap(n=>n.tags),l=s[s.length-1].meta;return{tags:t,meta:l,isEnd:l?l.pagination.pages===l.pagination.page:!0}}}),F=({filter:a,...s})=>{const t=Object.entries(a).map(([l,n])=>`${l}:${n}`).join(",");return D({...s,searchParams:{limit:"100",order:"name asc",include:"count.posts",filter:t,...s.searchParams}})},Z=()=>{const{search:a}=R(),t=new URLSearchParams(a).get("type")??"public",{data:l,isError:n,isLoading:i,isFetchingNextPage:x,fetchNextPage:u,hasNextPage:h}=F({filter:{visibility:t}});return e.jsxs(G,{children:[e.jsx(H,{currentTab:t}),e.jsx(A,{children:i?e.jsx("div",{className:"flex h-full items-center justify-center",children:e.jsx(I,{size:"lg"})}):n?e.jsxs("div",{className:"mb-16 flex h-full flex-col items-center justify-center",children:[e.jsx("h2",{className:"mb-2 text-xl font-medium",children:"Error loading tags"}),e.jsx("p",{className:"mb-4 text-muted-foreground",children:"Please reload the page to try again"}),e.jsx(g,{onClick:()=>window.location.reload(),children:"Reload page"})]}):l?.tags.length?e.jsx(q,{fetchNextPage:u,hasNextPage:h,isFetchingNextPage:x,items:l?.tags??[],totalItems:l?.meta?.pagination?.total??0}):e.jsx("div",{className:"flex h-full items-center justify-center",children:e.jsx(_,{actions:e.jsx(g,{asChild:!0,children:e.jsx("a",{href:"#/tags/new",children:"Create a new tag"})}),title:"Start organizing your content",children:e.jsx(B,{})})})})]})};export{Z as default};
@@ -1,4 +1,4 @@
1
- import{aA as a}from"./index-BYawr8p9.js";/**
1
+ import{aA as a}from"./index-CJU9a2PB.js";/**
2
2
  * @license lucide-react v0.553.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1 +1 @@
1
- import{r as v,ar as G,j as n,au as x,ay as z,e as u,as as F,av as P,ax as $,aq as D,aw as B,an as O,y as b}from"./index-BYawr8p9.js";var C="Toggle",T=v.forwardRef((e,o)=>{const{pressed:r,defaultPressed:t,onPressedChange:a,...l}=e,[s,i]=G({prop:r,onChange:a,defaultProp:t??!1,caller:C});return n.jsx(x.button,{type:"button","aria-pressed":s,"data-state":s?"on":"off","data-disabled":e.disabled?"":void 0,...l,ref:o,onClick:z(e.onClick,()=>{e.disabled||i(!s)})})});T.displayName=C;var j=T,c="ToggleGroup",[_]=F(c,[P]),I=P(),h=u.forwardRef((e,o)=>{const{type:r,...t}=e;if(r==="single"){const a=t;return n.jsx(q,{...a,ref:o})}if(r==="multiple"){const a=t;return n.jsx(H,{...a,ref:o})}throw new Error(`Missing prop \`type\` expected on \`${c}\``)});h.displayName=c;var[N,R]=_(c),q=u.forwardRef((e,o)=>{const{value:r,defaultValue:t,onValueChange:a=()=>{},...l}=e,[s,i]=G({prop:r,defaultProp:t??"",onChange:a,caller:c});return n.jsx(N,{scope:e.__scopeToggleGroup,type:"single",value:u.useMemo(()=>s?[s]:[],[s]),onItemActivate:i,onItemDeactivate:u.useCallback(()=>i(""),[i]),children:n.jsx(w,{...l,ref:o})})}),H=u.forwardRef((e,o)=>{const{value:r,defaultValue:t,onValueChange:a=()=>{},...l}=e,[s,i]=G({prop:r,defaultProp:t??[],onChange:a,caller:c}),g=u.useCallback(p=>i((d=[])=>[...d,p]),[i]),m=u.useCallback(p=>i((d=[])=>d.filter(A=>A!==p)),[i]);return n.jsx(N,{scope:e.__scopeToggleGroup,type:"multiple",value:s,onItemActivate:g,onItemDeactivate:m,children:n.jsx(w,{...l,ref:o})})});h.displayName=c;var[L,U]=_(c),w=u.forwardRef((e,o)=>{const{__scopeToggleGroup:r,disabled:t=!1,rovingFocus:a=!0,orientation:l,dir:s,loop:i=!0,...g}=e,m=I(r),p=D(s),d={role:"group",dir:p,...g};return n.jsx(L,{scope:r,rovingFocus:a,disabled:t,children:a?n.jsx(B,{asChild:!0,...m,orientation:l,dir:p,loop:i,children:n.jsx(x.div,{...d,ref:o})}):n.jsx(x.div,{...d,ref:o})})}),f="ToggleGroupItem",k=u.forwardRef((e,o)=>{const r=R(f,e.__scopeToggleGroup),t=U(f,e.__scopeToggleGroup),a=I(e.__scopeToggleGroup),l=r.value.includes(e.value),s=t.disabled||e.disabled,i={...e,pressed:l,disabled:s},g=u.useRef(null);return t.rovingFocus?n.jsx($,{asChild:!0,...a,focusable:!s,active:l,ref:g,children:n.jsx(y,{...i,ref:o})}):n.jsx(y,{...i,ref:o})});k.displayName=f;var y=u.forwardRef((e,o)=>{const{__scopeToggleGroup:r,value:t,...a}=e,l=R(f,r),s={role:"radio","aria-checked":e.pressed,"aria-pressed":void 0},i=l.type==="single"?s:void 0;return n.jsx(T,{...i,...a,ref:o,onPressedChange:g=>{g?l.onItemActivate(t):l.onItemDeactivate(t)}})}),V=h,E=k;const M=O("inline-flex items-center justify-center gap-2 rounded-sm text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-background data-[state=on]:text-foreground data-[state=on]:shadow-sm dark:hover:bg-background [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:stroke-[1.5px]",{variants:{variant:{default:"bg-transparent"},size:{default:"h-[26px] min-w-[26px] px-2",button:"h-[32px] min-w-[32px] px-3"}},defaultVariants:{variant:"default",size:"default"}}),J=v.forwardRef(({className:e,variant:o,size:r,...t},a)=>n.jsx(j,{ref:a,className:b(M({variant:o,size:r,className:e})),...t}));J.displayName=j.displayName;const S=v.createContext({size:"default",variant:"default"}),K=v.forwardRef(({className:e,variant:o,size:r,children:t,...a},l)=>n.jsx(V,{ref:l,className:b("inline-flex items-center justify-center gap-0.5 bg-gray-100 p-0.5 rounded-md dark:bg-gray-925/70",e),...a,children:n.jsx(S.Provider,{value:{variant:o,size:r},children:t})}));K.displayName=V.displayName;const Q=v.forwardRef(({className:e,children:o,variant:r,size:t,...a},l)=>{const s=v.useContext(S);return n.jsx(E,{ref:l,className:b(M({variant:s.variant||r,size:s.size||t}),e),...a,children:o})});Q.displayName=E.displayName;export{K as T,Q as a};
1
+ import{r as v,ar as G,j as n,au as x,ay as z,e as u,as as F,av as P,ax as $,aq as D,aw as B,an as O,y as b}from"./index-CJU9a2PB.js";var C="Toggle",T=v.forwardRef((e,o)=>{const{pressed:r,defaultPressed:t,onPressedChange:a,...l}=e,[s,i]=G({prop:r,onChange:a,defaultProp:t??!1,caller:C});return n.jsx(x.button,{type:"button","aria-pressed":s,"data-state":s?"on":"off","data-disabled":e.disabled?"":void 0,...l,ref:o,onClick:z(e.onClick,()=>{e.disabled||i(!s)})})});T.displayName=C;var j=T,c="ToggleGroup",[_]=F(c,[P]),I=P(),h=u.forwardRef((e,o)=>{const{type:r,...t}=e;if(r==="single"){const a=t;return n.jsx(q,{...a,ref:o})}if(r==="multiple"){const a=t;return n.jsx(H,{...a,ref:o})}throw new Error(`Missing prop \`type\` expected on \`${c}\``)});h.displayName=c;var[N,R]=_(c),q=u.forwardRef((e,o)=>{const{value:r,defaultValue:t,onValueChange:a=()=>{},...l}=e,[s,i]=G({prop:r,defaultProp:t??"",onChange:a,caller:c});return n.jsx(N,{scope:e.__scopeToggleGroup,type:"single",value:u.useMemo(()=>s?[s]:[],[s]),onItemActivate:i,onItemDeactivate:u.useCallback(()=>i(""),[i]),children:n.jsx(w,{...l,ref:o})})}),H=u.forwardRef((e,o)=>{const{value:r,defaultValue:t,onValueChange:a=()=>{},...l}=e,[s,i]=G({prop:r,defaultProp:t??[],onChange:a,caller:c}),g=u.useCallback(p=>i((d=[])=>[...d,p]),[i]),m=u.useCallback(p=>i((d=[])=>d.filter(A=>A!==p)),[i]);return n.jsx(N,{scope:e.__scopeToggleGroup,type:"multiple",value:s,onItemActivate:g,onItemDeactivate:m,children:n.jsx(w,{...l,ref:o})})});h.displayName=c;var[L,U]=_(c),w=u.forwardRef((e,o)=>{const{__scopeToggleGroup:r,disabled:t=!1,rovingFocus:a=!0,orientation:l,dir:s,loop:i=!0,...g}=e,m=I(r),p=D(s),d={role:"group",dir:p,...g};return n.jsx(L,{scope:r,rovingFocus:a,disabled:t,children:a?n.jsx(B,{asChild:!0,...m,orientation:l,dir:p,loop:i,children:n.jsx(x.div,{...d,ref:o})}):n.jsx(x.div,{...d,ref:o})})}),f="ToggleGroupItem",k=u.forwardRef((e,o)=>{const r=R(f,e.__scopeToggleGroup),t=U(f,e.__scopeToggleGroup),a=I(e.__scopeToggleGroup),l=r.value.includes(e.value),s=t.disabled||e.disabled,i={...e,pressed:l,disabled:s},g=u.useRef(null);return t.rovingFocus?n.jsx($,{asChild:!0,...a,focusable:!s,active:l,ref:g,children:n.jsx(y,{...i,ref:o})}):n.jsx(y,{...i,ref:o})});k.displayName=f;var y=u.forwardRef((e,o)=>{const{__scopeToggleGroup:r,value:t,...a}=e,l=R(f,r),s={role:"radio","aria-checked":e.pressed,"aria-pressed":void 0},i=l.type==="single"?s:void 0;return n.jsx(T,{...i,...a,ref:o,onPressedChange:g=>{g?l.onItemActivate(t):l.onItemDeactivate(t)}})}),V=h,E=k;const M=O("inline-flex items-center justify-center gap-2 rounded-sm text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-background data-[state=on]:text-foreground data-[state=on]:shadow-sm dark:hover:bg-background [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:stroke-[1.5px]",{variants:{variant:{default:"bg-transparent"},size:{default:"h-[26px] min-w-[26px] px-2",button:"h-[32px] min-w-[32px] px-3"}},defaultVariants:{variant:"default",size:"default"}}),J=v.forwardRef(({className:e,variant:o,size:r,...t},a)=>n.jsx(j,{ref:a,className:b(M({variant:o,size:r,className:e})),...t}));J.displayName=j.displayName;const S=v.createContext({size:"default",variant:"default"}),K=v.forwardRef(({className:e,variant:o,size:r,children:t,...a},l)=>n.jsx(V,{ref:l,className:b("inline-flex items-center justify-center gap-0.5 bg-gray-100 p-0.5 rounded-md dark:bg-gray-925/70",e),...a,children:n.jsx(S.Provider,{value:{variant:o,size:r},children:t})}));K.displayName=V.displayName;const Q=v.forwardRef(({className:e,children:o,variant:r,size:t,...a},l)=>{const s=v.useContext(S);return n.jsx(E,{ref:l,className:b(M({variant:s.variant||r,size:s.size||t}),e),...a,children:o})});Q.displayName=E.displayName;export{K as T,Q as a};
@@ -1 +1 @@
1
- import{p as b,r as t,j as o,B as T}from"./index-BYawr8p9.js";const k=({currentTopic:s,onTopicChange:r,excludeTopics:a=[]})=>{const{topicsQuery:c}=b(),{data:i}=c,f={slug:"following",name:"Following"},d=i?.topics||[],p=[f,...d].filter(({slug:e})=>!a.includes(e)),l=t.useRef(null),u=t.useRef(null),[m,h]=t.useState(!0),w=e=>{const{scrollLeft:n,scrollWidth:x,clientWidth:v}=e.currentTarget;h(n+v<x-1)};return t.useEffect(()=>{l.current&&l.current.scrollIntoView({behavior:"smooth",block:"nearest",inline:"center"})},[s]),o.jsxs("div",{className:"relative w-full",children:[o.jsx("div",{ref:u,className:"flex w-full min-w-0 max-w-full snap-x snap-mandatory gap-2 overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",onScroll:w,children:p.map(({slug:e,name:n})=>o.jsx(T,{ref:s===e?l:null,className:"h-8 snap-start rounded-full px-3.5 text-sm",variant:s===e?"default":"secondary",onClick:()=>r(e),children:n},e))}),m&&o.jsx("div",{className:"pointer-events-none absolute right-0 top-0 h-full w-12 bg-gradient-to-l from-white to-transparent dark:from-black"})]})};export{k as T};
1
+ import{p as b,r as t,j as o,B as T}from"./index-CJU9a2PB.js";const k=({currentTopic:s,onTopicChange:r,excludeTopics:a=[]})=>{const{topicsQuery:c}=b(),{data:i}=c,f={slug:"following",name:"Following"},d=i?.topics||[],p=[f,...d].filter(({slug:e})=>!a.includes(e)),l=t.useRef(null),u=t.useRef(null),[m,h]=t.useState(!0),w=e=>{const{scrollLeft:n,scrollWidth:x,clientWidth:v}=e.currentTarget;h(n+v<x-1)};return t.useEffect(()=>{l.current&&l.current.scrollIntoView({behavior:"smooth",block:"nearest",inline:"center"})},[s]),o.jsxs("div",{className:"relative w-full",children:[o.jsx("div",{ref:u,className:"flex w-full min-w-0 max-w-full snap-x snap-mandatory gap-2 overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",onScroll:w,children:p.map(({slug:e,name:n})=>o.jsx(T,{ref:s===e?l:null,className:"h-8 snap-start rounded-full px-3.5 text-sm",variant:s===e?"default":"secondary",onClick:()=>r(e),children:n},e))}),m&&o.jsx("div",{className:"pointer-events-none absolute right-0 top-0 h-full w-12 bg-gradient-to-l from-white to-transparent dark:from-black"})]})};export{k as T};
@@ -1,4 +1,4 @@
1
- import{aA as a}from"./index-BYawr8p9.js";/**
1
+ import{aA as a}from"./index-CJU9a2PB.js";/**
2
2
  * @license lucide-react v0.553.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1 +1 @@
1
- import{j as c}from"./index-BYawr8p9.js";import{M as h}from"./wallet-cards-KaTkgqvi.js";const i=({defaultSourceIconUrl:e,displayName:t,iconSrc:s})=>c.jsx(c.Fragment,{children:t.trim().toLowerCase().endsWith("newsletter")?c.jsx(h,{"aria-label":"Newsletter",className:"size-4 text-muted-foreground"}):c.jsx("img",{alt:"",className:"size-4",src:s,onError:o=>{o.currentTarget.src=e}})}),r={POSTS:"posts",PAGES:"pages",POSTS_AND_PAGES:"posts_and_pages",SOURCES:"sources"},w=e=>{switch(e){case r.POSTS:return"Top posts";case r.PAGES:return"Top pages";case r.SOURCES:return"Top sources";default:return"Top content"}},m=(e,t,s)=>{switch(e){case r.POSTS:return`Your highest viewed posts ${s(t)}`;case r.PAGES:return`Your highest viewed pages ${s(t)}`;case r.POSTS_AND_PAGES:return`Your highest viewed posts or pages ${s(t)}`;case r.SOURCES:return`How readers found your site ${s(t)}`;default:return`Your highest viewed posts or pages ${s(t)}`}},d=(e,t,s)=>{switch(e){case r.POSTS:return`Which posts drove the most growth ${s(t)}`;case r.PAGES:return`Which pages drove the most growth ${s(t)}`;case r.POSTS_AND_PAGES:return`Which posts or pages drove the most growth ${s(t)}`;case r.SOURCES:return`How readers found your site ${s(t)}`;default:return`Which posts drove the most growth ${s(t)}`}};function p(e,t){if(!e||!t)return"";try{const s=new URL(t),o=s.pathname.endsWith("/")?s.pathname:`${s.pathname}/`,a=e.replace(/^\//,""),n=`${o}${a}`;return`${s.origin}${n}`}catch{return""}}function f(e,t,s,o,a){return()=>{if(t&&e&&a==="post"){o(`/posts/analytics/${t}`,{crossApp:!0});return}if(e&&s){const n=p(e,s);n&&window.open(n,"_blank","noopener,noreferrer")}}}export{r as C,i as S,d as a,f as b,m as c,w as g};
1
+ import{j as c}from"./index-CJU9a2PB.js";import{M as h}from"./wallet-cards-Do7nPf3f.js";const i=({defaultSourceIconUrl:e,displayName:t,iconSrc:s})=>c.jsx(c.Fragment,{children:t.trim().toLowerCase().endsWith("newsletter")?c.jsx(h,{"aria-label":"Newsletter",className:"size-4 text-muted-foreground"}):c.jsx("img",{alt:"",className:"size-4",src:s,onError:o=>{o.currentTarget.src=e}})}),r={POSTS:"posts",PAGES:"pages",POSTS_AND_PAGES:"posts_and_pages",SOURCES:"sources"},w=e=>{switch(e){case r.POSTS:return"Top posts";case r.PAGES:return"Top pages";case r.SOURCES:return"Top sources";default:return"Top content"}},m=(e,t,s)=>{switch(e){case r.POSTS:return`Your highest viewed posts ${s(t)}`;case r.PAGES:return`Your highest viewed pages ${s(t)}`;case r.POSTS_AND_PAGES:return`Your highest viewed posts or pages ${s(t)}`;case r.SOURCES:return`How readers found your site ${s(t)}`;default:return`Your highest viewed posts or pages ${s(t)}`}},d=(e,t,s)=>{switch(e){case r.POSTS:return`Which posts drove the most growth ${s(t)}`;case r.PAGES:return`Which pages drove the most growth ${s(t)}`;case r.POSTS_AND_PAGES:return`Which posts or pages drove the most growth ${s(t)}`;case r.SOURCES:return`Which sources drove the most growth ${s(t)}`;default:return`Which posts drove the most growth ${s(t)}`}};function p(e,t){if(!e||!t)return"";try{const s=new URL(t),o=s.pathname.endsWith("/")?s.pathname:`${s.pathname}/`,a=e.replace(/^\//,""),n=`${o}${a}`;return`${s.origin}${n}`}catch{return""}}function f(e,t,s,o,a){return()=>{if(t&&e&&a==="post"){o(`/posts/analytics/${t}`,{crossApp:!0});return}if(e&&s){const n=p(e,s);n&&window.open(n,"_blank","noopener,noreferrer")}}}export{r as C,i as S,d as a,f as b,m as c,w as g};
@@ -1 +1 @@
1
- import{r as C,af as F,ag as H,ah as s,ai as _,aj as j}from"./index-BYawr8p9.js";import{u as k,a as v,b as V}from"./stats-r0Bphuvi.js";import{g as G}from"./currency-fEUUCkj0.js";const K=(r,b,D,i)=>{if(!r.length)return{totalMembers:0,freeMembers:0,paidMembers:0,mrr:0,percentChanges:{total:"0%",free:"0%",paid:"0%",mrr:"0%"},directions:{total:"same",free:"same",paid:"same",mrr:"same"}};const p=i||r[r.length-1],l=r.length>0?r[r.length-1]:{free:0,paid:0,comped:0},P=b.length>0?b[b.length-1]:{mrr:0},d=p.free+p.paid+p.comped,g=P.mrr,M={total:"0%",free:"0%",paid:"0%",mrr:"0%"},y={total:"same",free:"same",paid:"same",mrr:"same"};if(r.length>1){const t=r[0],e=t.free+t.paid+t.comped;if(e>0){const a=(d-e)/e*100;M.total=_(a/100),y.total=a>0?"up":a<0?"down":"same"}if(t.free>0){const a=(l.free-t.free)/t.free*100;M.free=_(a/100),y.free=a>0?"up":a<0?"down":"same"}const f=t.paid+t.comped,c=l.paid+l.comped;if(f>0){const a=(c-f)/f*100;M.paid=_(a/100),y.paid=a>0?"up":a<0?"down":"same"}}if(b.length>1){const t=s(D).format("YYYY-MM-DD"),e=b.find(a=>s(a.date).isSameOrAfter(t)),f=s(D).isSame(s().startOf("year"),"day")||s(D).year()<s().year();let c=0;if(e&&s(e.date).isSame(t,"day")?c=e.mrr:f?c=0:c=g,c>=0){const a=c===0?g>0?100:0:(g-c)/c*100;M.mrr=_(a/100),y.mrr=a>0?"up":a<0?"down":"same"}}return{totalMembers:d,freeMembers:p.free,paidMembers:p.paid+p.comped,mrr:g,percentChanges:M,directions:y}},N=(r,b)=>{const D=[...r].sort((t,e)=>new Date(t.date).getTime()-new Date(e.date).getTime()),i=[...b].sort((t,e)=>new Date(t.date).getTime()-new Date(e.date).getTime()),p=D.map(t=>t.date),l=i.map(t=>t.date),P=[...new Set([...p,...l])].sort((t,e)=>new Date(t).getTime()-new Date(e).getTime());let d=null,g=null;const M=new Map(D.map(t=>[t.date,t])),y=new Map(i.map(t=>[t.date,t]));return P.map(t=>{const e=M.get(t);e&&(d=e);const f=y.get(t);f&&(g=f);const c=d?.free??0,a=d?.paid??0,O=d?.comped??0,A=a+O,L=c+A,o=g?.mrr??0,R=d?.paid_subscribed??0,w=d?.paid_canceled??0;return{date:t,value:L,free:c,paid:A,comped:O,mrr:o,paid_subscribed:R,paid_canceled:w,formattedValue:j(L),label:"Total members"}})},X=r=>{const{startDate:b,endDate:D}=C.useMemo(()=>F(r),[r]),i=H(b),p=r===1?s(i).subtract(1,"day").format("YYYY-MM-DD"):i,{data:l,isLoading:P}=k({searchParams:{date_from:p}}),{data:d,isLoading:g}=v({searchParams:{date_from:p}}),{data:M,isLoading:y}=V(),t=C.useMemo(()=>{let o=[];if(l?.stats?o=l.stats:Array.isArray(l)&&(o=l),r===1&&o.length>=2){const R=o[o.length-2],w=o[o.length-1],S=s(i).format("YYYY-MM-DD"),m=s(i).add(1,"day").format("YYYY-MM-DD"),u={...R,date:S},T={...w,date:m};return[u,T]}return o},[l,r,i]),{mrrData:e,selectedCurrency:f}=C.useMemo(()=>{const o=s(i),R=r===1?s().endOf("day"):s().startOf("day");if(d?.stats&&d?.meta?.totals){const w=d.meta.totals;let S=w[0];if(!S)return{mrrData:[],selectedCurrency:"usd"};for(const n of w)n.mrr>S.mrr&&(S=n);const m=S.currency,u=d.stats.filter(n=>n.currency===m),T=u.filter(n=>s(n.date).isSameOrAfter(o)),E=[...u].sort((n,Y)=>new Date(Y.date).getTime()-new Date(n.date).getTime()),h=[...T];if(!h.some(n=>s(n.date).isSame(o,"day"))){const n=E.find(Y=>s(Y.date).isBefore(o));if(n)h.unshift({...n,date:o.format("YYYY-MM-DD")});else if(h.length>0){const Y=[...h].sort((B,I)=>new Date(B.date).getTime()-new Date(I.date).getTime())[0];h.unshift({...Y,date:o.format("YYYY-MM-DD")})}}const x=r===1?s().startOf("day"):R;if(!h.some(n=>s(n.date).isSame(x,"day"))&&h.length>0){const Y=[...h].sort((B,I)=>new Date(I.date).getTime()-new Date(B.date).getTime())[0];h.push({...Y,date:x.format("YYYY-MM-DD")})}return{mrrData:h.sort((n,Y)=>new Date(n.date).getTime()-new Date(Y.date).getTime()),selectedCurrency:m}}return{mrrData:[],selectedCurrency:"usd"}},[d,i,r]),c=C.useMemo(()=>K(t,e,i,l?.meta?.totals),[t,e,i,l?.meta?.totals]),a=C.useMemo(()=>N(t,e),[t,e]),O=C.useMemo(()=>G(f),[f]),A=C.useMemo(()=>P||g||y,[P,g,y]),L=C.useMemo(()=>{if(!M?.stats)return[];const o=M.stats.reduce((m,u)=>{const T=u.date;return m[T]||(m[T]={date:T,signups:0,cancellations:0}),m[T].signups+=u.signups,m[T].cancellations+=u.cancellations,m},{}),R=Object.values(o).sort((m,u)=>new Date(m.date).getTime()-new Date(u.date).getTime()),w=s(i),S=s(D);return R.filter(m=>{const u=s(m.date);return u.isSameOrAfter(w)&&u.isSameOrBefore(S)})},[M,i,D]);return{isLoading:A,memberData:t,mrrData:e,dateFrom:i,endDate:D,totals:c,chartData:a,subscriptionData:L,selectedCurrency:f,currencySymbol:O}};export{X as u};
1
+ import{r as C,af as F,ag as H,ah as s,ai as _,aj as j}from"./index-CJU9a2PB.js";import{u as k,a as v,b as V}from"./stats-B1mhlQSp.js";import{g as G}from"./currency-fEUUCkj0.js";const K=(r,b,D,i)=>{if(!r.length)return{totalMembers:0,freeMembers:0,paidMembers:0,mrr:0,percentChanges:{total:"0%",free:"0%",paid:"0%",mrr:"0%"},directions:{total:"same",free:"same",paid:"same",mrr:"same"}};const p=i||r[r.length-1],l=r.length>0?r[r.length-1]:{free:0,paid:0,comped:0},P=b.length>0?b[b.length-1]:{mrr:0},d=p.free+p.paid+p.comped,g=P.mrr,M={total:"0%",free:"0%",paid:"0%",mrr:"0%"},y={total:"same",free:"same",paid:"same",mrr:"same"};if(r.length>1){const t=r[0],e=t.free+t.paid+t.comped;if(e>0){const a=(d-e)/e*100;M.total=_(a/100),y.total=a>0?"up":a<0?"down":"same"}if(t.free>0){const a=(l.free-t.free)/t.free*100;M.free=_(a/100),y.free=a>0?"up":a<0?"down":"same"}const f=t.paid+t.comped,c=l.paid+l.comped;if(f>0){const a=(c-f)/f*100;M.paid=_(a/100),y.paid=a>0?"up":a<0?"down":"same"}}if(b.length>1){const t=s(D).format("YYYY-MM-DD"),e=b.find(a=>s(a.date).isSameOrAfter(t)),f=s(D).isSame(s().startOf("year"),"day")||s(D).year()<s().year();let c=0;if(e&&s(e.date).isSame(t,"day")?c=e.mrr:f?c=0:c=g,c>=0){const a=c===0?g>0?100:0:(g-c)/c*100;M.mrr=_(a/100),y.mrr=a>0?"up":a<0?"down":"same"}}return{totalMembers:d,freeMembers:p.free,paidMembers:p.paid+p.comped,mrr:g,percentChanges:M,directions:y}},N=(r,b)=>{const D=[...r].sort((t,e)=>new Date(t.date).getTime()-new Date(e.date).getTime()),i=[...b].sort((t,e)=>new Date(t.date).getTime()-new Date(e.date).getTime()),p=D.map(t=>t.date),l=i.map(t=>t.date),P=[...new Set([...p,...l])].sort((t,e)=>new Date(t).getTime()-new Date(e).getTime());let d=null,g=null;const M=new Map(D.map(t=>[t.date,t])),y=new Map(i.map(t=>[t.date,t]));return P.map(t=>{const e=M.get(t);e&&(d=e);const f=y.get(t);f&&(g=f);const c=d?.free??0,a=d?.paid??0,O=d?.comped??0,A=a+O,L=c+A,o=g?.mrr??0,R=d?.paid_subscribed??0,w=d?.paid_canceled??0;return{date:t,value:L,free:c,paid:A,comped:O,mrr:o,paid_subscribed:R,paid_canceled:w,formattedValue:j(L),label:"Total members"}})},X=r=>{const{startDate:b,endDate:D}=C.useMemo(()=>F(r),[r]),i=H(b),p=r===1?s(i).subtract(1,"day").format("YYYY-MM-DD"):i,{data:l,isLoading:P}=k({searchParams:{date_from:p}}),{data:d,isLoading:g}=v({searchParams:{date_from:p}}),{data:M,isLoading:y}=V(),t=C.useMemo(()=>{let o=[];if(l?.stats?o=l.stats:Array.isArray(l)&&(o=l),r===1&&o.length>=2){const R=o[o.length-2],w=o[o.length-1],S=s(i).format("YYYY-MM-DD"),m=s(i).add(1,"day").format("YYYY-MM-DD"),u={...R,date:S},T={...w,date:m};return[u,T]}return o},[l,r,i]),{mrrData:e,selectedCurrency:f}=C.useMemo(()=>{const o=s(i),R=r===1?s().endOf("day"):s().startOf("day");if(d?.stats&&d?.meta?.totals){const w=d.meta.totals;let S=w[0];if(!S)return{mrrData:[],selectedCurrency:"usd"};for(const n of w)n.mrr>S.mrr&&(S=n);const m=S.currency,u=d.stats.filter(n=>n.currency===m),T=u.filter(n=>s(n.date).isSameOrAfter(o)),E=[...u].sort((n,Y)=>new Date(Y.date).getTime()-new Date(n.date).getTime()),h=[...T];if(!h.some(n=>s(n.date).isSame(o,"day"))){const n=E.find(Y=>s(Y.date).isBefore(o));if(n)h.unshift({...n,date:o.format("YYYY-MM-DD")});else if(h.length>0){const Y=[...h].sort((B,I)=>new Date(B.date).getTime()-new Date(I.date).getTime())[0];h.unshift({...Y,date:o.format("YYYY-MM-DD")})}}const x=r===1?s().startOf("day"):R;if(!h.some(n=>s(n.date).isSame(x,"day"))&&h.length>0){const Y=[...h].sort((B,I)=>new Date(I.date).getTime()-new Date(B.date).getTime())[0];h.push({...Y,date:x.format("YYYY-MM-DD")})}return{mrrData:h.sort((n,Y)=>new Date(n.date).getTime()-new Date(Y.date).getTime()),selectedCurrency:m}}return{mrrData:[],selectedCurrency:"usd"}},[d,i,r]),c=C.useMemo(()=>K(t,e,i,l?.meta?.totals),[t,e,i,l?.meta?.totals]),a=C.useMemo(()=>N(t,e),[t,e]),O=C.useMemo(()=>G(f),[f]),A=C.useMemo(()=>P||g||y,[P,g,y]),L=C.useMemo(()=>{if(!M?.stats)return[];const o=M.stats.reduce((m,u)=>{const T=u.date;return m[T]||(m[T]={date:T,signups:0,cancellations:0}),m[T].signups+=u.signups,m[T].cancellations+=u.cancellations,m},{}),R=Object.values(o).sort((m,u)=>new Date(m.date).getTime()-new Date(u.date).getTime()),w=s(i),S=s(D);return R.filter(m=>{const u=s(m.date);return u.isSameOrAfter(w)&&u.isSameOrBefore(S)})},[M,i,D]);return{isLoading:A,memberData:t,mrrData:e,dateFrom:i,endDate:D,totals:c,chartData:a,subscriptionData:L,selectedCurrency:f,currencySymbol:O}};export{X as u};
@@ -1,4 +1,4 @@
1
- import{j as p,y as v,an as R,b0 as T,r as S,aB as F}from"./index-BYawr8p9.js";function j({className:n,children:l}){return p.jsx("div",{className:v("flex items-center gap-2 [grid-area:above]",n),"data-header":"header-above",children:l})}function D({className:n,children:l}){return p.jsx(T,{className:v("text-2xl leading-[1.2em] lg:text-3xl [grid-area:title]",n),"data-header":"header-title",children:l})}function W({className:n,children:l}){return p.jsx("div",{className:v("flex items-center justify-start text-muted-foreground [grid-area:meta] pb-4 pt-1",n),"data-header":"header-meta",children:l})}function H({className:n,children:l}){return p.jsx("div",{className:v("flex items-center gap-2",n),"data-header":"header-action-group",children:l})}function N({className:n,children:l}){return p.jsx("div",{className:v("flex items-center gap-4 [grid-area:actions] sm:justify-self-end self-start",n),"data-header":"header-actions",children:l})}function V({className:n,children:l}){return p.jsx("div",{className:v("flex items-center gap-2 [grid-area:nav] self-start mt-2 lg:mt-0.5",n),"data-header":"header-nav",children:l})}const L=R("sticky top-0 z-50 -mb-4 grid gap-x-4 bg-gradient-to-b from-background via-background/70 to-background/70 p-4 backdrop-blur-md [grid-template-areas:'above''title''meta''actions''nav'] sm:[grid-template-areas:'above_above''title_actions''meta_actions''nav_nav'] lg:-mb-8 lg:p-8 dark:bg-black",{variants:{variant:{default:"lg:[grid-template-areas:'above_above''title_actions''meta_actions''nav_nav']","inline-nav":"lg:[grid-template-areas:'above_above_above''title_nav_actions''meta_nav_actions'] lg:[grid-template-columns:1fr_auto_auto]"}},defaultVariants:{variant:"default"}});function y({className:n,children:l,variant:e}){return p.jsx("header",{className:v(L({variant:e,className:n})),"data-header":"header",children:l})}y.Above=j;y.Title=D;y.Actions=N;y.ActionGroup=H;y.Nav=V;y.Meta=W;function I(n){const e=n instanceof HTMLElement&&window.getComputedStyle(n).overflowY,t=e!=="visible"&&e!=="hidden";if(n){if(t&&n.scrollHeight>=n.clientHeight)return n}else return null;return I(n.parentNode)||document.body}function x(n,l,e){let t=e.initialDeps??[],s;function i(){var o,r,a,c;let h;e.key&&((o=e.debug)!=null&&o.call(e))&&(h=Date.now());const f=n();if(!(f.length!==t.length||f.some((d,g)=>t[g]!==d)))return s;t=f;let m;if(e.key&&((r=e.debug)!=null&&r.call(e))&&(m=Date.now()),s=l(...f),e.key&&((a=e.debug)!=null&&a.call(e))){const d=Math.round((Date.now()-h)*100)/100,g=Math.round((Date.now()-m)*100)/100,E=g/16,w=(b,A)=>{for(b=String(b);b.length<A;)b=" "+b;return b};console.info(`%c⏱ ${w(g,5)} /${w(d,5)} ms`,`
1
+ import{j as p,y as v,an as R,b0 as T,r as S,aB as F}from"./index-CJU9a2PB.js";function j({className:n,children:l}){return p.jsx("div",{className:v("flex items-center gap-2 [grid-area:above]",n),"data-header":"header-above",children:l})}function D({className:n,children:l}){return p.jsx(T,{className:v("text-2xl leading-[1.2em] lg:text-3xl [grid-area:title]",n),"data-header":"header-title",children:l})}function W({className:n,children:l}){return p.jsx("div",{className:v("flex items-center justify-start text-muted-foreground [grid-area:meta] pb-4 pt-1",n),"data-header":"header-meta",children:l})}function H({className:n,children:l}){return p.jsx("div",{className:v("flex items-center gap-2",n),"data-header":"header-action-group",children:l})}function N({className:n,children:l}){return p.jsx("div",{className:v("flex items-center gap-4 [grid-area:actions] sm:justify-self-end self-start",n),"data-header":"header-actions",children:l})}function V({className:n,children:l}){return p.jsx("div",{className:v("flex items-center gap-2 [grid-area:nav] self-start mt-2 lg:mt-0.5",n),"data-header":"header-nav",children:l})}const L=R("sticky top-0 z-50 -mb-4 grid gap-x-4 bg-gradient-to-b from-background via-background/70 to-background/70 p-4 backdrop-blur-md [grid-template-areas:'above''title''meta''actions''nav'] sm:[grid-template-areas:'above_above''title_actions''meta_actions''nav_nav'] lg:-mb-8 lg:p-8 dark:bg-black",{variants:{variant:{default:"lg:[grid-template-areas:'above_above''title_actions''meta_actions''nav_nav']","inline-nav":"lg:[grid-template-areas:'above_above_above''title_nav_actions''meta_nav_actions'] lg:[grid-template-columns:1fr_auto_auto]"}},defaultVariants:{variant:"default"}});function y({className:n,children:l,variant:e}){return p.jsx("header",{className:v(L({variant:e,className:n})),"data-header":"header",children:l})}y.Above=j;y.Title=D;y.Actions=N;y.ActionGroup=H;y.Nav=V;y.Meta=W;function I(n){const e=n instanceof HTMLElement&&window.getComputedStyle(n).overflowY,t=e!=="visible"&&e!=="hidden";if(n){if(t&&n.scrollHeight>=n.clientHeight)return n}else return null;return I(n.parentNode)||document.body}function x(n,l,e){let t=e.initialDeps??[],s;function i(){var o,r,a,c;let h;e.key&&((o=e.debug)!=null&&o.call(e))&&(h=Date.now());const f=n();if(!(f.length!==t.length||f.some((d,g)=>t[g]!==d)))return s;t=f;let m;if(e.key&&((r=e.debug)!=null&&r.call(e))&&(m=Date.now()),s=l(...f),e.key&&((a=e.debug)!=null&&a.call(e))){const d=Math.round((Date.now()-h)*100)/100,g=Math.round((Date.now()-m)*100)/100,E=g/16,w=(b,A)=>{for(b=String(b);b.length<A;)b=" "+b;return b};console.info(`%c⏱ ${w(g,5)} /${w(d,5)} ms`,`
2
2
  font-size: .6rem;
3
3
  font-weight: bold;
4
4
  color: hsl(${Math.max(0,Math.min(120-120*E,120))}deg 100% 31%);`,e?.key)}return(c=e?.onChange)==null||c.call(e,s),s}return i.updateDeps=o=>{t=o},i}function M(n,l){if(n===void 0)throw new Error("Unexpected undefined");return n}const B=(n,l)=>Math.abs(n-l)<1.01,P=(n,l,e)=>{let t;return function(...s){n.clearTimeout(t),t=n.setTimeout(()=>l.apply(this,s),e)}},z=n=>{const{offsetWidth:l,offsetHeight:e}=n;return{width:l,height:e}},$=n=>n,q=n=>{const l=Math.max(n.startIndex-n.overscan,0),e=Math.min(n.endIndex+n.overscan,n.count-1),t=[];for(let s=l;s<=e;s++)t.push(s);return t},U=(n,l)=>{const e=n.scrollElement;if(!e)return;const t=n.targetWindow;if(!t)return;const s=o=>{const{width:r,height:a}=o;l({width:Math.round(r),height:Math.round(a)})};if(s(z(e)),!t.ResizeObserver)return()=>{};const i=new t.ResizeObserver(o=>{const r=()=>{const a=o[0];if(a?.borderBoxSize){const c=a.borderBoxSize[0];if(c){s({width:c.inlineSize,height:c.blockSize});return}}s(z(e))};n.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(r):r()});return i.observe(e,{box:"border-box"}),()=>{i.unobserve(e)}},O={passive:!0},C=typeof window>"u"?!0:"onscrollend"in window,K=(n,l)=>{const e=n.scrollElement;if(!e)return;const t=n.targetWindow;if(!t)return;let s=0;const i=n.options.useScrollendEvent&&C?()=>{}:P(t,()=>{l(s,!1)},n.options.isScrollingResetDelay),o=h=>()=>{const{horizontal:f,isRtl:u}=n.options;s=f?e.scrollLeft*(u&&-1||1):e.scrollTop,i(),l(s,h)},r=o(!0),a=o(!1);a(),e.addEventListener("scroll",r,O);const c=n.options.useScrollendEvent&&C;return c&&e.addEventListener("scrollend",a,O),()=>{e.removeEventListener("scroll",r),c&&e.removeEventListener("scrollend",a)}},G=(n,l,e)=>{if(l?.borderBoxSize){const t=l.borderBoxSize[0];if(t)return Math.round(t[e.options.horizontal?"inlineSize":"blockSize"])}return n[e.options.horizontal?"offsetWidth":"offsetHeight"]},Y=(n,{adjustments:l=0,behavior:e},t)=>{var s,i;const o=n+l;(i=(s=t.scrollElement)==null?void 0:s.scrollTo)==null||i.call(s,{[t.options.horizontal?"left":"top"]:o,behavior:e})};class J{constructor(l){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.measurementsCache=[],this.itemSizeCache=new Map,this.pendingMeasuredCacheIndexes=[],this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this.elementsCache=new Map,this.observer=(()=>{let e=null;const t=()=>e||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:e=new this.targetWindow.ResizeObserver(s=>{s.forEach(i=>{const o=()=>{this._measureElement(i.target,i)};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(o):o()})}));return{disconnect:()=>{var s;(s=t())==null||s.disconnect(),e=null},observe:s=>{var i;return(i=t())==null?void 0:i.observe(s,{box:"border-box"})},unobserve:s=>{var i;return(i=t())==null?void 0:i.unobserve(s)}}})(),this.range=null,this.setOptions=e=>{Object.entries(e).forEach(([t,s])=>{typeof s>"u"&&delete e[t]}),this.options={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:$,rangeExtractor:q,onChange:()=>{},measureElement:G,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:"data-index",initialMeasurementsCache:[],lanes:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,...e}},this.notify=e=>{var t,s;(s=(t=this.options).onChange)==null||s.call(t,this,e)},this.maybeNotify=x(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),e=>{this.notify(e)},{key:!1,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(e=>e()),this.unsubs=[],this.observer.disconnect(),this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{var e;const t=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==t){if(this.cleanup(),!t){this.maybeNotify();return}this.scrollElement=t,this.scrollElement&&"ownerDocument"in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=((e=this.scrollElement)==null?void 0:e.window)??null,this.elementsCache.forEach(s=>{this.observer.observe(s)}),this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0}),this.unsubs.push(this.options.observeElementRect(this,s=>{this.scrollRect=s,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(s,i)=>{this.scrollAdjustments=0,this.scrollDirection=i?this.getScrollOffset()<s?"forward":"backward":null,this.scrollOffset=s,this.isScrolling=i,this.maybeNotify()}))}},this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?"width":"height"]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset=="function"?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(e,t)=>{const s=new Map,i=new Map;for(let o=t-1;o>=0;o--){const r=e[o];if(s.has(r.lane))continue;const a=i.get(r.lane);if(a==null||r.end>a.end?i.set(r.lane,r):r.end<a.end&&s.set(r.lane,!0),s.size===this.options.lanes)break}return i.size===this.options.lanes?Array.from(i.values()).sort((o,r)=>o.end===r.end?o.index-r.index:o.end-r.end)[0]:void 0},this.getMeasurementOptions=x(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled],(e,t,s,i,o)=>(this.pendingMeasuredCacheIndexes=[],{count:e,paddingStart:t,scrollMargin:s,getItemKey:i,enabled:o}),{key:!1}),this.getMeasurements=x(()=>[this.getMeasurementOptions(),this.itemSizeCache],({count:e,paddingStart:t,scrollMargin:s,getItemKey:i,enabled:o},r)=>{if(!o)return this.measurementsCache=[],this.itemSizeCache.clear(),[];this.measurementsCache.length===0&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(h=>{this.itemSizeCache.set(h.key,h.size)}));const a=this.pendingMeasuredCacheIndexes.length>0?Math.min(...this.pendingMeasuredCacheIndexes):0;this.pendingMeasuredCacheIndexes=[];const c=this.measurementsCache.slice(0,a);for(let h=a;h<e;h++){const f=i(h),u=this.options.lanes===1?c[h-1]:this.getFurthestMeasurement(c,h),m=u?u.end+this.options.gap:t+s,d=r.get(f),g=typeof d=="number"?d:this.options.estimateSize(h),E=m+g,w=u?u.lane:h%this.options.lanes;c[h]={index:h,start:m,size:g,end:E,key:f,lane:w}}return this.measurementsCache=c,c},{key:!1,debug:()=>this.options.debug}),this.calculateRange=x(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(e,t,s,i)=>this.range=e.length>0&&t>0?Q({measurements:e,outerSize:t,scrollOffset:s,lanes:i}):null,{key:!1,debug:()=>this.options.debug}),this.getVirtualIndexes=x(()=>{let e=null,t=null;const s=this.calculateRange();return s&&(e=s.startIndex,t=s.endIndex),this.maybeNotify.updateDeps([this.isScrolling,e,t]),[this.options.rangeExtractor,this.options.overscan,this.options.count,e,t]},(e,t,s,i,o)=>i===null||o===null?[]:e({startIndex:i,endIndex:o,overscan:t,count:s}),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=e=>{const t=this.options.indexAttribute,s=e.getAttribute(t);return s?parseInt(s,10):(console.warn(`Missing attribute name '${t}={index}' on measured element.`),-1)},this._measureElement=(e,t)=>{const s=this.indexFromElement(e),i=this.measurementsCache[s];if(!i)return;const o=i.key,r=this.elementsCache.get(o);r!==e&&(r&&this.observer.unobserve(r),this.observer.observe(e),this.elementsCache.set(o,e)),e.isConnected&&this.resizeItem(s,this.options.measureElement(e,t,this))},this.resizeItem=(e,t)=>{const s=this.measurementsCache[e];if(!s)return;const i=this.itemSizeCache.get(s.key)??s.size,o=t-i;o!==0&&((this.shouldAdjustScrollPositionOnItemSizeChange!==void 0?this.shouldAdjustScrollPositionOnItemSizeChange(s,o,this):s.start<this.getScrollOffset()+this.scrollAdjustments)&&this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=o,behavior:void 0}),this.pendingMeasuredCacheIndexes.push(s.index),this.itemSizeCache=new Map(this.itemSizeCache.set(s.key,t)),this.notify(!1))},this.measureElement=e=>{if(!e){this.elementsCache.forEach((t,s)=>{t.isConnected||(this.observer.unobserve(t),this.elementsCache.delete(s))});return}this._measureElement(e,void 0)},this.getVirtualItems=x(()=>[this.getVirtualIndexes(),this.getMeasurements()],(e,t)=>{const s=[];for(let i=0,o=e.length;i<o;i++){const r=e[i],a=t[r];s.push(a)}return s},{key:!1,debug:()=>this.options.debug}),this.getVirtualItemForOffset=e=>{const t=this.getMeasurements();if(t.length!==0)return M(t[k(0,t.length-1,s=>M(t[s]).start,e)])},this.getOffsetForAlignment=(e,t,s=0)=>{const i=this.getSize(),o=this.getScrollOffset();t==="auto"&&(t=e>=o+i?"end":"start"),t==="center"?e+=(s-i)/2:t==="end"&&(e-=i);const r=this.getTotalSize()+this.options.scrollMargin-i;return Math.max(Math.min(r,e),0)},this.getOffsetForIndex=(e,t="auto")=>{e=Math.max(0,Math.min(e,this.options.count-1));const s=this.measurementsCache[e];if(!s)return;const i=this.getSize(),o=this.getScrollOffset();if(t==="auto")if(s.end>=o+i-this.options.scrollPaddingEnd)t="end";else if(s.start<=o+this.options.scrollPaddingStart)t="start";else return[o,t];const r=t==="end"?s.end+this.options.scrollPaddingEnd:s.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(r,t,s.size),t]},this.isDynamicMode=()=>this.elementsCache.size>0,this.scrollToOffset=(e,{align:t="start",behavior:s}={})=>{s==="smooth"&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),this._scrollToOffset(this.getOffsetForAlignment(e,t),{adjustments:void 0,behavior:s})},this.scrollToIndex=(e,{align:t="auto",behavior:s}={})=>{s==="smooth"&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),e=Math.max(0,Math.min(e,this.options.count-1));let i=0;const o=10,r=c=>{if(!this.targetWindow)return;const h=this.getOffsetForIndex(e,c);if(!h){console.warn("Failed to get offset for index:",e);return}const[f,u]=h;this._scrollToOffset(f,{adjustments:void 0,behavior:s}),this.targetWindow.requestAnimationFrame(()=>{const m=this.getScrollOffset(),d=this.getOffsetForIndex(e,u);if(!d){console.warn("Failed to get offset for index:",e);return}B(d[0],m)||a(u)})},a=c=>{this.targetWindow&&(i++,i<o?this.targetWindow.requestAnimationFrame(()=>r(c)):console.warn(`Failed to scroll to index ${e} after ${o} attempts.`))};r(t)},this.scrollBy=(e,{behavior:t}={})=>{t==="smooth"&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),this._scrollToOffset(this.getScrollOffset()+e,{adjustments:void 0,behavior:t})},this.getTotalSize=()=>{var e;const t=this.getMeasurements();let s;if(t.length===0)s=this.options.paddingStart;else if(this.options.lanes===1)s=((e=t[t.length-1])==null?void 0:e.end)??0;else{const i=Array(this.options.lanes).fill(null);let o=t.length-1;for(;o>=0&&i.some(r=>r===null);){const r=t[o];i[r.lane]===null&&(i[r.lane]=r.end),o--}s=Math.max(...i.filter(r=>r!==null))}return Math.max(s-this.options.scrollMargin+this.options.paddingEnd,0)},this._scrollToOffset=(e,{adjustments:t,behavior:s})=>{this.options.scrollToFn(e,{behavior:s,adjustments:t},this)},this.measure=()=>{this.itemSizeCache=new Map,this.notify(!1)},this.setOptions(l)}}const k=(n,l,e,t)=>{for(;n<=l;){const s=(n+l)/2|0,i=e(s);if(i<t)n=s+1;else if(i>t)l=s-1;else return s}return n>0?n-1:0};function Q({measurements:n,outerSize:l,scrollOffset:e,lanes:t}){const s=n.length-1,i=a=>n[a].start;if(n.length<=t)return{startIndex:0,endIndex:s};let o=k(0,s,i,e),r=o;if(t===1)for(;r<s&&n[r].end<e+l;)r++;else if(t>1){const a=Array(t).fill(0);for(;r<s&&a.some(h=>h<e+l);){const h=n[r];a[h.lane]=h.end,r++}const c=Array(t).fill(e+l);for(;o>=0&&c.some(h=>h>=e);){const h=n[o];c[h.lane]=h.start,o--}o=Math.max(0,o-o%t),r=Math.min(s,r+(t-1-r%t))}return{startIndex:o,endIndex:r}}const _=typeof document<"u"?S.useLayoutEffect:S.useEffect;function X(n){const l=S.useReducer(()=>({}),{})[1],e={...n,onChange:(s,i)=>{var o;i?F.flushSync(l):l(),(o=n.onChange)==null||o.call(n,s,i)}},[t]=S.useState(()=>new J(e));return t.setOptions(e),_(()=>t._didMount(),[]),_(()=>t._willUpdate()),t}function Z(n){return X({observeElementRect:U,observeElementOffset:K,scrollToFn:Y,...n})}function te({items:n,totalItems:l,parentRef:e,hasNextPage:t,isFetchingNextPage:s,fetchNextPage:i,estimateSize:o=()=>100,overscan:r=5}){const a=Z({count:l,getScrollElement:()=>I(e.current),estimateSize:o,overscan:r}),c=a.getVirtualItems(),h=c.length>0?(c.at(0)?.start??0)-a.options.scrollMargin:0,f=c.length>0?a.getTotalSize()-(c.at(-1)?.end??0):0,u=c.map(d=>({virtualItem:d,key:d.key,item:n[d.index],props:{ref:a.measureElement,"data-index":d.index}})),m=u.at(-1)&&!u.at(-1)?.item;return S.useEffect(()=>{t&&m&&!s&&i()},[t,m,s,i]),{visibleItems:u,virtualizer:a,spaceBefore:h,spaceAfter:f}}export{y as H,I as g,te as u};
@@ -1 +1 @@
1
- import{e as u,j as i,y as l,B as c,aJ as h,r as m}from"./index-BYawr8p9.js";import{A as N}from"./lucide-react-DKlmxVQI.js";const j=u.forwardRef(({className:e,children:t,...n},a)=>i.jsx("div",{ref:a,className:l("flex items-center justify-between gap-4 pb-6 text-sm",e),...n,children:t}));j.displayName="SimplePagination";const w=u.forwardRef(({className:e,currentPage:t,totalPages:n,...a},r)=>i.jsxs("span",{ref:r,className:l("text-muted-foreground",e),...a,children:["Pages ",t," of ",n]}));w.displayName="SimplePaginationPages";const v=u.forwardRef(({className:e,children:t,...n},a)=>i.jsx("div",{ref:a,className:l("flex items-center gap-1.5",e),...n,children:t}));v.displayName="SimplePaginationNavigation";const y=u.forwardRef(({variant:e="outline",...t},n)=>i.jsx(c,{ref:n,size:"sm",variant:e,...t,children:i.jsx(h,{})}));y.displayName="SimplePaginationPreviousButton";const M=u.forwardRef(({variant:e="outline",...t},n)=>i.jsx(c,{ref:n,size:"sm",variant:e,...t,children:i.jsx(N,{})}));M.displayName="SimplePaginationNextButton";function b({data:e,itemsPerPage:t,initialPage:n=1}){const[a,r]=m.useState(n);if(t<=0)throw new Error("itemsPerPage must be a positive number");const p=s=>{const S=Math.max(1,Math.min(o,s));r(S)},o=m.useMemo(()=>e?Math.ceil(e.length/t):1,[e,t]);m.useEffect(()=>{a>o&&r(1)},[a,o]);const g=m.useMemo(()=>{if(!e)return null;const s=(a-1)*t;return e.slice(s,s+t)},[e,a,t]),f=()=>{r(s=>Math.min(o,s+1))},x=()=>{r(s=>Math.max(1,s-1))},P=a<o,d=a>1;return{currentPage:a,setCurrentPage:p,totalPages:o,paginatedData:g,nextPage:f,previousPage:x,hasNextPage:P,hasPreviousPage:d}}export{j as S,v as a,y as b,M as c,w as d,b as u};
1
+ import{e as u,j as i,y as l,B as c,aJ as h,r as m}from"./index-CJU9a2PB.js";import{A as N}from"./lucide-react-B7UnD_Dp.js";const j=u.forwardRef(({className:e,children:t,...n},a)=>i.jsx("div",{ref:a,className:l("flex items-center justify-between gap-4 pb-6 text-sm",e),...n,children:t}));j.displayName="SimplePagination";const w=u.forwardRef(({className:e,currentPage:t,totalPages:n,...a},r)=>i.jsxs("span",{ref:r,className:l("text-muted-foreground",e),...a,children:["Pages ",t," of ",n]}));w.displayName="SimplePaginationPages";const v=u.forwardRef(({className:e,children:t,...n},a)=>i.jsx("div",{ref:a,className:l("flex items-center gap-1.5",e),...n,children:t}));v.displayName="SimplePaginationNavigation";const y=u.forwardRef(({variant:e="outline",...t},n)=>i.jsx(c,{ref:n,size:"sm",variant:e,...t,children:i.jsx(h,{})}));y.displayName="SimplePaginationPreviousButton";const M=u.forwardRef(({variant:e="outline",...t},n)=>i.jsx(c,{ref:n,size:"sm",variant:e,...t,children:i.jsx(N,{})}));M.displayName="SimplePaginationNextButton";function b({data:e,itemsPerPage:t,initialPage:n=1}){const[a,r]=m.useState(n);if(t<=0)throw new Error("itemsPerPage must be a positive number");const p=s=>{const S=Math.max(1,Math.min(o,s));r(S)},o=m.useMemo(()=>e?Math.ceil(e.length/t):1,[e,t]);m.useEffect(()=>{a>o&&r(1)},[a,o]);const g=m.useMemo(()=>{if(!e)return null;const s=(a-1)*t;return e.slice(s,s+t)},[e,a,t]),f=()=>{r(s=>Math.min(o,s+1))},x=()=>{r(s=>Math.max(1,s-1))},P=a<o,d=a>1;return{currentPage:a,setCurrentPage:p,totalPages:o,paginatedData:g,nextPage:f,previousPage:x,hasNextPage:P,hasPreviousPage:d}}export{j as S,v as a,y as b,M as c,w as d,b as u};
@@ -1,4 +1,4 @@
1
- import{aA as e}from"./index-BYawr8p9.js";/**
1
+ import{aA as e}from"./index-CJU9a2PB.js";/**
2
2
  * @license lucide-react v0.553.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{aA as a}from"./index-BYawr8p9.js";/**
1
+ import{aA as a}from"./index-CJU9a2PB.js";/**
2
2
  * @license lucide-react v0.553.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1 +1 @@
1
- import{aR as le,j as e,aW as ve,ap as Ce,B as ne,b5 as Ne,aY as _e,b6 as Z,aP as Le,aO as Ee,bJ as Fe,bK as ye,bL as Pe,bM as De,bN as Te,bO as Ae,b$ as Ie,aj as ke,ai as Oe,r as l,c0 as Me,aQ as ae,bS as we,af as ce,ag as Q,c1 as Ue,bR as Re,aM as Ve,u as Be,aS as ze,aN as $e}from"./index-BYawr8p9.js";import{A as oe,a as p,u as $,S as ue,b as de,U as me}from"./post-analytics-context-geHk7rOj.js";import{S as Ke,a as Ge,b as We,c as He,d as Qe,e as Ye,f as qe}from"./select-BhvNY3I-.js";import{a as Je,F as Xe,b as Ze,c as et}from"./message-square-text-CaMVBVPr.js";import{g as tt,a as st,S as at,b as nt}from"./kpis-Dt4OFY3L.js";import{F as ot,c as q,e as pe}from"./en-BBc7b85q.js";import{C as he,a as it,b as rt,h as lt,c as ge,i as ct,u as W,j as ee}from"./pagemenu-BMXHDXYy.js";import{D as ut,h as dt,i as ie,a as mt,b as pt,c as ht,d as gt,e as ft,f as bt,g as xt}from"./data-list-Bw1CQEZ9.js";import{a as jt,U as St}from"./wallet-cards-KaTkgqvi.js";import{P as vt,a as Ct}from"./post-analytics-header-DXfc4KeX.js";import{F as Nt,c as _t}from"./filters-DUFXZZnu.js";import{b as Lt,c as Et,d as Ft,S as yt,T as Pt}from"./lucide-react-DKlmxVQI.js";import{E as Dt}from"./empty-indicator-DBrIZcFq.js";import"./posts-Bsvw11Zo.js";import"./source-icon-C2iFWMlV.js";import"./source-utils-B1S3ZHA2.js";import"./gh-chart-BV97-O7c.js";import"./chart-DGA1MaFs.js";import"./_baseAssignValue-BX8EallQ.js";import"./tabs-C2sFfNcp.js";import"./index-Kji6JKl7.js";import"./post-share-modal-Dql4fYjR.js";import"./post-helpers-gInwAwEv.js";import"./trash-BglGemAb.js";import"./sprout-BW9HFVU8.js";import"./a-large-small-CKZJgscl.js";import"./at-sign-CqQzllfI.js";import"./copy-BFuV16bY.js";import"./hash-CdH0ikFp.js";import"./inbox-Bd0uf1Ez.js";import"./minus-2XwCoFJV.js";import"./tags-BL_N4nn2.js";import"./square-BCNGSZhW.js";import"./user-round-check-BjHbfXKY.js";import"./repeat-COP-3g8d.js";import"./reply-JE8tmvOn.js";const H=[{name:"Public visitors",value:"undefined",bit:p.PUBLIC},{name:"Free members",value:"free",bit:p.FREE},{name:"Paid members",value:"paid",bit:p.PAID}],fe=t=>!t||t.length===0?oe:H.filter(s=>t.includes(s.value)).reduce((s,a)=>s|a.bit,0)||oe,be=t=>{const s=[];return(t&p.PUBLIC)!==0&&s.push(H[0].value),(t&p.FREE)!==0&&s.push(H[1].value),(t&p.PAID)!==0&&s.push(H[2].value),s.join(",")},Tt=()=>{const{audience:t,setAudience:s}=$(),{appSettings:a}=le(),i=o=>{s(t^o)},n=o=>(t&o)!==0,c=(o,m)=>{o.preventDefault(),i(m)},u=()=>{const o=[];if(n(p.PUBLIC)&&o.push("Public visitors"),n(p.FREE)&&o.push("Free members"),!a?.paidMembersEnabled){if(o.length===2)return"All audiences";if(o.length===1)return n(p.FREE)?"Free members":"Public visitors";if(o.length===0)return"Select audience"}return n(p.PAID)&&o.push("Paid members"),o.length===0?"Select audience":o.length===3?"All audiences":n(p.FREE)&&n(p.PAID)&&!n(p.PUBLIC)?"Members-only":o.join(" & ")};return e.jsxs(ve,{children:[e.jsx(Ce,{asChild:!0,children:e.jsxs(ne,{variant:"dropdown",children:[e.jsx(Ne,{}),e.jsx("span",{className:"lowercase first-letter:capitalize",children:u()})]})}),e.jsxs(_e,{align:"end",className:"w-full min-w-48",children:[e.jsx(Z,{checked:n(p.PUBLIC),onSelect:o=>c(o,p.PUBLIC),children:"Public visitors"}),e.jsx(Z,{checked:n(p.FREE),onSelect:o=>c(o,p.FREE),children:"Free members"}),a?.paidMembersEnabled&&e.jsx(Z,{checked:n(p.PAID),onSelect:o=>c(o,p.PAID),children:"Paid members"})]})]})},te=()=>{const{range:t,setRange:s}=$();return e.jsxs(Ke,{value:`${t}`,onValueChange:a=>{s(Number(a))},children:[e.jsxs(Ge,{className:"w-auto",children:[e.jsx(Je,{className:"mr-2",size:16,strokeWidth:1.5}),e.jsx(We,{placeholder:"Select a period"})]}),e.jsx(He,{align:"end",children:e.jsxs(Qe,{children:[e.jsx(Ye,{children:"Period"}),Object.values(ue).map(a=>e.jsx(qe,{value:`${a.value}`,children:a.name},a.value))]})})]})};q.registerLocale(pe);const At=t=>de[t]||q.getName(t,"en")||"Unknown",It=t=>{const s={"UNITED STATES":"US","UNITED STATES OF AMERICA":"US",USA:"US","UNITED KINGDOM":"GB",UK:"GB","GREAT BRITAIN":"GB",NETHERLANDS:"NL"},a=t.toUpperCase();return s[a]||(t.length>2?t.substring(0,2):t)},re=({tableHeader:t,data:s,onLocationClick:a})=>e.jsxs(ut,{children:[t&&e.jsxs(dt,{children:[e.jsx(ie,{children:"Country"}),e.jsx(ie,{children:"Visitors"})]}),e.jsx(mt,{children:s.map(i=>{const n=At(`${i.location}`),c=a&&i.location!=="Unknown",u=i.location?i.location.toLowerCase():"unknown";return e.jsxs(pt,{className:c?"cursor-pointer":"","data-testid":`location-row-${u}`,onClick:c?()=>a(i.location):void 0,children:[e.jsx(ht,{style:{width:`${i.percentage?Math.round(i.percentage*100):0}%`}}),e.jsx(gt,{className:"group-hover/data:max-w-[calc(100%-140px)]",children:e.jsxs("div",{className:"flex items-center space-x-3 overflow-hidden",title:n,children:[e.jsx(ot,{countryCode:`${It(i.location)}`,fallback:e.jsx("span",{className:"flex h-[14px] w-[22px] items-center justify-center rounded-[2px] bg-black text-white",children:e.jsx(Ie.SkullAndBones,{className:"size-3"})})}),e.jsx("div",{className:"truncate font-medium",children:n})]})}),e.jsxs(ft,{children:[e.jsx(bt,{children:ke(Number(i.visits))}),e.jsx(xt,{children:Oe(i.percentage)})]})]},i.location||"unknown")})})]}),kt=({data:t,isLoading:s,onLocationClick:a})=>{const i=t.slice(0,10);return e.jsx(e.Fragment,{children:s?"":e.jsx(e.Fragment,{children:t&&t.length>0&&e.jsxs(he,{className:"group/datalist","data-testid":"locations-card",children:[e.jsxs("div",{className:"flex items-center justify-between p-6",children:[e.jsxs(it,{className:"p-0",children:[e.jsx(rt,{children:"Locations"}),e.jsx(lt,{children:"Where are the readers of this post"})]}),e.jsx(Le,{className:"mr-2",children:"Visitors"})]}),e.jsxs(ge,{className:"overflow-hidden",children:[e.jsx(Ee,{}),e.jsx(re,{data:i,tableHeader:!1,onLocationClick:a})]}),t.length>10&&e.jsx(ct,{children:e.jsxs(Fe,{children:[e.jsx(ye,{asChild:!0,children:e.jsxs(ne,{variant:"outline",children:["View all ",e.jsx(jt,{})]})}),e.jsxs(Pe,{className:"overflow-y-auto pt-0 sm:max-w-[600px]",children:[e.jsxs(De,{className:"sticky top-0 z-40 -mx-6 bg-background/60 p-6 backdrop-blur",children:[e.jsx(Te,{children:"Top locations"}),e.jsx(Ae,{children:"Where are the readers of this post"})]}),e.jsx("div",{className:"group/datalist",children:e.jsx(re,{data:t,tableHeader:!0,onLocationClick:a})})]})]})})]})})})};q.registerLocale(pe);const Ot=t=>de[t]||q.getName(t,"en")||t,Mt=({visits:t})=>e.jsx("span",{className:"order-2 font-mono text-xs text-muted-foreground",children:t.toLocaleString()}),wt={utm_source:{endpoint:"api_top_utm_sources",valueKey:"utm_source",transformValue:t=>({value:t||"(not set)",label:t||"(not set)"})},utm_medium:{endpoint:"api_top_utm_mediums",valueKey:"utm_medium",transformValue:t=>({value:t||"(not set)",label:t||"(not set)"})},utm_campaign:{endpoint:"api_top_utm_campaigns",valueKey:"utm_campaign",transformValue:t=>({value:t||"(not set)",label:t||"(not set)"})},utm_content:{endpoint:"api_top_utm_contents",valueKey:"utm_content",transformValue:t=>({value:t||"(not set)",label:t||"(not set)"})},utm_term:{endpoint:"api_top_utm_terms",valueKey:"utm_term",transformValue:t=>({value:t||"(not set)",label:t||"(not set)"})},source:{endpoint:"api_top_sources",valueKey:"source",transformValue:t=>({value:t||"",label:t||"Direct"})},location:{endpoint:"api_top_locations",valueKey:"location",filterItem(t){const s=String(t.location||"");return s!==""&&!me.includes(s)},transformValue:t=>({value:t,label:Ot(t)})},device:{endpoint:"api_top_devices",valueKey:"device",transformValue:t=>({value:t,label:t==="mobile-ios"?"iOS":t==="mobile-android"?"Android":t==="desktop"?"Desktop":t==="bot"?"Bot":t})}},Ut=(t,s,a)=>{const i={...a};return t.forEach(n=>{if(n.field===s||n.values.length===0)return;const c=n.values[0];n.field!=="audience"&&(n.field==="source"||n.field==="device"||n.field==="location"||n.field.startsWith("utm_"))&&(i[n.field]=c)}),i},P=(t,s=[],a,i={})=>{const{enabled:n=!0}=i,{statsConfig:c,range:u}=$(),{startDate:o,endDate:m,timezone:b}=ce(u),h=wt[t],f=l.useMemo(()=>{const N=s.find(v=>v.field==="audience");return fe(N?.values)},[s]),g=l.useMemo(()=>{const N={site_uuid:c?.id||"",date_from:Q(o),date_to:Q(m),timezone:b,member_status:be(f),limit:"50"};return a&&(N.post_uuid=a),Ut(s,t,N)},[c?.id,o,m,b,f,s,t,a]),{data:C,loading:D}=W({endpoint:h?.endpoint||"",statsConfig:c,params:g,enabled:n&&!!h});return{options:l.useMemo(()=>h?(C||[]).filter(v=>h.filterItem?h.filterItem(v):!0).map(v=>{const F=String(v[h.valueKey]??""),y=Number(v.visits)||0,{value:w,label:U}=h.transformValue?h.transformValue(F):{value:F,label:F};return{label:U,value:w,icon:e.jsx(Mt,{visits:y})}}):[],[C,h]),loading:D}};function Rt({filters:t,utmTrackingEnabled:s=!1,onChange:a,...i}){const{appSettings:n}=le(),{post:c}=$(),u=c?.uuid,[o,m]=l.useState(null),[b,h]=l.useState(!1);l.useEffect(()=>{const j=window.matchMedia("(max-width: 1024px)"),_=k=>{h(k.matches)};return _(j),j.addEventListener("change",_),()=>j.removeEventListener("change",_)},[]);const f=l.useMemo(()=>{const j=[{value:"undefined",label:"Public visitors",icon:e.jsx(ae,{className:"text-gray-700"})},{value:"free",label:"Free members",icon:e.jsx(we,{className:"text-green"})},{value:"paid",label:"Paid members",icon:e.jsx(St,{className:"text-orange"})}];return n?.paidMembersEnabled?j:j.filter(_=>_.value!=="paid")},[n?.paidMembersEnabled]),g=l.useCallback(j=>{const _=o===j,k=t.some(O=>O.field===j);return _||k},[o,t]),{options:C,loading:D}=P("utm_source",t,u,{enabled:g("utm_source")}),{options:M,loading:N}=P("utm_medium",t,u,{enabled:g("utm_medium")}),{options:v,loading:F}=P("utm_campaign",t,u,{enabled:g("utm_campaign")}),{options:y,loading:w}=P("utm_content",t,u,{enabled:g("utm_content")}),{options:U,loading:R}=P("utm_term",t,u,{enabled:g("utm_term")}),{options:T,loading:K}=P("source",t,u,{enabled:g("source")}),{options:A,loading:B}=P("device",t,u,{enabled:g("device")}),{options:I,loading:G}=P("location",t,u,{enabled:g("location")}),x=l.useMemo(()=>[{value:"is",label:"is"}],[]),J=l.useMemo(()=>{const j=s?[{key:"utm_source",label:"UTM Source",type:"select",icon:e.jsx(Ft,{className:"size-4"}),placeholder:"Select source",operators:x,defaultOperator:"is",hideOperatorSelect:!0,options:C,isLoading:D,searchable:!0,selectedOptionsClassName:"hidden"},{key:"utm_medium",label:"UTM Medium",type:"select",icon:e.jsx(yt,{className:"size-4"}),placeholder:"Select medium",operators:x,defaultOperator:"is",hideOperatorSelect:!0,options:M,isLoading:N,className:"w-60",popoverContentClassName:"w-60",searchable:!0,selectedOptionsClassName:"hidden"},{key:"utm_campaign",label:"UTM Campaign",type:"select",icon:e.jsx(et,{className:"size-4"}),placeholder:"Select campaign",operators:x,defaultOperator:"is",hideOperatorSelect:!0,options:v,isLoading:F,className:"w-60",popoverContentClassName:"w-60",searchable:!0,selectedOptionsClassName:"hidden"},{key:"utm_content",label:"UTM Content",type:"select",icon:e.jsx(Pt,{className:"size-4"}),placeholder:"Select content",operators:x,defaultOperator:"is",hideOperatorSelect:!0,options:y,isLoading:w,className:"w-60",popoverContentClassName:"w-60",searchable:!0,selectedOptionsClassName:"hidden"},{key:"utm_term",label:"UTM Term",type:"select",icon:e.jsx(Ue,{className:"size-4"}),placeholder:"Select term",operators:x,defaultOperator:"is",hideOperatorSelect:!0,options:U,isLoading:R,className:"w-60",popoverContentClassName:"w-60",searchable:!0,selectedOptionsClassName:"hidden"}]:[];return[{group:"Basic",fields:[{key:"audience",label:"Audience",type:"multiselect",icon:e.jsx(Me,{}),options:f.map(({value:_,label:k,icon:O})=>({value:_,label:k,icon:O})),defaultOperator:"is any of",hideOperatorSelect:!0,autoCloseOnSelect:!0},{key:"source",label:"Source",type:"select",icon:e.jsx(ae,{className:"size-4"}),placeholder:"Select source",operators:x,defaultOperator:"is",hideOperatorSelect:!0,options:T,isLoading:K,className:"w-60",popoverContentClassName:"w-60",searchable:!0,selectedOptionsClassName:"hidden"},{key:"device",label:"Device",type:"select",icon:e.jsx(Lt,{className:"size-4"}),placeholder:"Select device",operators:x,defaultOperator:"is",hideOperatorSelect:!0,options:A,isLoading:B,selectedOptionsClassName:"hidden"},{key:"location",label:"Location",type:"select",icon:e.jsx(Et,{className:"size-4"}),placeholder:"Select location",operators:x,defaultOperator:"is",hideOperatorSelect:!0,options:I,isLoading:G,searchable:!0,selectedOptionsClassName:"hidden"}]},...s?[{group:"UTM parameters",fields:j}]:[]]},[s,C,D,M,N,v,F,y,w,U,R,x,f,T,K,A,B,I,G]),V=t.length>0,X=l.useCallback(()=>{a&&a([])},[a]);return e.jsxs("div",{className:"mt-3 flex w-full justify-between gap-2 lg:mt-0","data-testid":"stats-filter-container",children:[e.jsx(Nt,{addButtonIcon:e.jsx(Xe,{}),addButtonText:V?"Add filter":"Filter",allowMultiple:!1,className:`[&>button]:order-last ${V&&"[&>button]:border-none"}`,fields:J,filters:t,keyboardShortcut:"f",popoverAlign:b||V?"start":"end",showSearchInput:!1,onActiveFieldChange:m,onChange:a||(()=>{}),...i}),V&&e.jsxs(ne,{className:"hidden font-normal text-muted-foreground lg:flex","data-testid":"stats-filter-clear-button",variant:"ghost",onClick:X,children:[e.jsx(Ze,{}),"Clear"]})]})}const Y=["audience","source","device","location","utm_source","utm_medium","utm_campaign","utm_content","utm_term"],xe="__empty__",je="%2C";function Vt(t){const s=new URLSearchParams;return t.forEach(a=>{if(Y.includes(a.field)&&a.values.length>0){const i=a.values.map(n=>n===""?xe:String(n).replace(/,/g,je)).join(",");s.set(a.field,i)}}),s}const se=new Map;function Bt(t){return se.has(t)||se.set(t,`url-${t}-${Date.now()}-${Math.random().toString(36).substring(2,11)}`),se.get(t)}function zt(t){const s=[],a=new Set(Y);return t.forEach((i,n)=>{if(!a.has(n))return;const c=i.split(",").map(u=>u===xe?"":u.replace(new RegExp(je,"g"),","));if(c.length>0){const u=n==="audience"?"is any of":"is";s.push({id:Bt(n),field:n,operator:u,values:c})}}),s}function $t(t={}){const[s,a]=Re(),{onFiltersChange:i}=t,n=l.useRef(!1),c=l.useMemo(()=>zt(s),[s]);l.useEffect(()=>{!n.current&&i&&i(c)},[c,i]);const u=l.useCallback(m=>{n.current=!0;const b=typeof m=="function"?m(c):m,h=Vt(b),f=new URLSearchParams(s);Y.forEach(g=>{f.delete(g)}),h.forEach((g,C)=>{f.set(C,g)}),a(f,{replace:!0}),setTimeout(()=>{n.current=!1},0)},[c,s,a]),o=l.useCallback(()=>{n.current=!0;const m=new URLSearchParams(s);Y.forEach(b=>{m.delete(b)}),a(m,{replace:!0}),setTimeout(()=>{n.current=!1},0)},[s,a]);return{filters:c,setFilters:u,clearFilters:o}}const Es=()=>{const t=Ve(),{postId:s}=Be(),{statsConfig:a,isLoading:i,range:n,audience:c,data:u,post:o,isPostLoading:m}=$(),{filters:b,setFilters:h}=$t(),f=u?.labs?.utmTracking||!1,g=l.useMemo(()=>{if(!f)return c;const r=b.find(S=>S.field==="audience");return fe(r?.values)},[f,c,b]);l.useEffect(()=>{!m&&o?.email_only&&t(`/posts/analytics/${s}`)},[m,o?.email_only,t,s]);const C=l.useMemo(()=>{if(!o?.published_at)return ue.ALL_TIME.value;const r=ze(o.published_at);return n>r?r:n},[o?.published_at,n]),{startDate:D,endDate:M,timezone:N}=ce(C),v=l.useCallback(()=>{const r=document.querySelector(".overflow-y-scroll");r&&r.scrollTo({top:0,behavior:"smooth"})},[]),F=l.useMemo(()=>{const r={};return b.forEach(S=>{const L=S.field,E=S.values;if(L==="audience")return;const d=E&&E.length>0&&E[0]!==null&&E[0]!==void 0,z=L==="source"&&E?.[0]==="";if(d&&(E[0]!==""||z)){const Se=String(E[0]);r[L]=Se}}),r},[b]),y=l.useCallback((r,S)=>{h(L=>L.find(d=>d.field===r)?L.map(d=>d.field===r?{...d,values:[S]}:d):[...L,_t(r,"is",[S])]),v()},[h,v]),w=l.useCallback(r=>y("location",r),[y]),U=l.useCallback(r=>y("source",r),[y]),R=l.useMemo(()=>{const r={site_uuid:a?.id||"",date_from:Q(D),date_to:Q(M),timezone:N,member_status:be(g),post_uuid:"",...F};return!m&&o?.uuid?{...r,post_uuid:o.uuid}:r},[m,o,a?.id,D,M,N,g,F]),{data:T,loading:K}=W({endpoint:"api_kpis",statsConfig:a||{id:""},params:R}),{data:A,loading:B}=W({endpoint:"api_top_locations",statsConfig:a||{id:""},params:R}),{data:I,loading:G}=W({endpoint:"api_top_sources",statsConfig:a||{id:""},params:R}),x=l.useMemo(()=>A?.reduce((r,S)=>r+Number(S.visits),0)||0,[A]),J=l.useMemo(()=>I?I.reduce((r,S)=>r+Number(S.visits||0),0):0,[I]),V=u?.url,X=u?.icon,j=l.useMemo(()=>{const r=A?.map(d=>({location:String(d.location),visits:Number(d.visits),percentage:x>0?Number(d.visits)/x:0,isUnknown:me.includes(String(d.location))}))||[],S=r.filter(d=>!d.isUnknown),L=r.filter(d=>d.isUnknown),E=L.length>0?[{location:"Unknown",visits:L.reduce((d,z)=>d+z.visits,0),percentage:L.reduce((d,z)=>d+z.percentage,0)}]:[];return[...S,...E]},[A,x]),_=i||m||K||B||G,k=tt(T),O=b.length>0;return e.jsxs(e.Fragment,{children:[e.jsx(vt,{currentTab:"Web",children:f?e.jsxs(e.Fragment,{children:[O&&e.jsx(ee,{children:e.jsx(te,{})}),e.jsxs(ee,{className:`${O?"!mt-0 [grid-area:subactions] lg:!mt-[25px]":"[grid-area:actions]"}`,children:[e.jsx(Rt,{filters:b,utmTrackingEnabled:f,onChange:h}),!O&&e.jsx(te,{})]})]}):e.jsxs(ee,{children:[e.jsx(Tt,{}),e.jsx(te,{})]})}),e.jsx(Ct,{children:_?e.jsx(he,{className:"size-full",variant:"plain",children:e.jsx(ge,{className:"size-full items-center justify-center",children:e.jsx($e,{})})}):T&&T.length!==0&&k.visits!=="0"?e.jsxs(e.Fragment,{children:[e.jsx(st,{data:T,range:C}),e.jsxs("div",{className:"flex flex-col gap-6 lg:grid lg:grid-cols-2",children:[e.jsx(kt,{data:j,isLoading:B,onLocationClick:f?w:void 0}),e.jsx(at,{data:I,range:C,siteIcon:X,siteUrl:V,totalVisitors:J,onSourceClick:f?U:void 0})]})]}):e.jsx("div",{className:"grow",children:e.jsx(Dt,{className:"h-full",description:"Try adjusting filters to see more data.",title:`No visitors ${nt(n)}`,children:e.jsx(ae,{strokeWidth:1.5})})})})]})};export{Es as default};
1
+ import{aR as le,j as e,aW as ve,ap as Ce,B as ne,b5 as Ne,aY as _e,b6 as Z,aP as Le,aO as Ee,bJ as Fe,bK as ye,bL as Pe,bM as De,bN as Te,bO as Ae,b$ as Ie,aj as ke,ai as Oe,r as l,c0 as Me,aQ as ae,bS as we,af as ce,ag as Q,c1 as Ue,bR as Re,aM as Ve,u as Be,aS as ze,aN as $e}from"./index-CJU9a2PB.js";import{A as oe,a as p,u as $,S as ue,b as de,U as me}from"./post-analytics-context-C7oW3aBz.js";import{S as Ke,a as Ge,b as We,c as He,d as Qe,e as Ye,f as qe}from"./select-B4QhMW5f.js";import{a as Je,F as Xe,b as Ze,c as et}from"./message-square-text-CS3iRuPc.js";import{g as tt,a as st,S as at,b as nt}from"./kpis-DzbAHfKK.js";import{F as ot,c as q,e as pe}from"./en-B8qaJx-T.js";import{C as he,a as it,b as rt,h as lt,c as ge,i as ct,u as W,j as ee}from"./pagemenu-aHubMPwB.js";import{D as ut,h as dt,i as ie,a as mt,b as pt,c as ht,d as gt,e as ft,f as bt,g as xt}from"./data-list-yngXNZDF.js";import{a as jt,U as St}from"./wallet-cards-Do7nPf3f.js";import{P as vt,a as Ct}from"./post-analytics-header-BjGFgN6A.js";import{F as Nt,c as _t}from"./filters-jAXQSPq6.js";import{b as Lt,c as Et,d as Ft,S as yt,T as Pt}from"./lucide-react-B7UnD_Dp.js";import{E as Dt}from"./empty-indicator-BXWniwsl.js";import"./posts-BwP7BNcB.js";import"./source-icon-Bzw-AU8p.js";import"./source-utils-B1S3ZHA2.js";import"./gh-chart-DwTCK8z_.js";import"./chart-CqJxisVP.js";import"./_baseAssignValue-hsL6ItjC.js";import"./tabs-BwQ-i6MY.js";import"./index-6syrC9X1.js";import"./post-share-modal-Su923uIc.js";import"./post-helpers-gInwAwEv.js";import"./trash-CZ3EXwTL.js";import"./sprout-C2R5CbXV.js";import"./a-large-small-BPPu_Iy7.js";import"./at-sign-CYnGzOFc.js";import"./copy-DWiB-781.js";import"./hash-p9dv0yuc.js";import"./inbox-CRoP9sy5.js";import"./minus-emzwh6hq.js";import"./tags-DXDZbfxp.js";import"./square-DT1uWkxs.js";import"./user-round-check-D3ihrrKL.js";import"./repeat-ms5ocvE0.js";import"./reply-BvO85IDn.js";const H=[{name:"Public visitors",value:"undefined",bit:p.PUBLIC},{name:"Free members",value:"free",bit:p.FREE},{name:"Paid members",value:"paid",bit:p.PAID}],fe=t=>!t||t.length===0?oe:H.filter(s=>t.includes(s.value)).reduce((s,a)=>s|a.bit,0)||oe,be=t=>{const s=[];return(t&p.PUBLIC)!==0&&s.push(H[0].value),(t&p.FREE)!==0&&s.push(H[1].value),(t&p.PAID)!==0&&s.push(H[2].value),s.join(",")},Tt=()=>{const{audience:t,setAudience:s}=$(),{appSettings:a}=le(),i=o=>{s(t^o)},n=o=>(t&o)!==0,c=(o,m)=>{o.preventDefault(),i(m)},u=()=>{const o=[];if(n(p.PUBLIC)&&o.push("Public visitors"),n(p.FREE)&&o.push("Free members"),!a?.paidMembersEnabled){if(o.length===2)return"All audiences";if(o.length===1)return n(p.FREE)?"Free members":"Public visitors";if(o.length===0)return"Select audience"}return n(p.PAID)&&o.push("Paid members"),o.length===0?"Select audience":o.length===3?"All audiences":n(p.FREE)&&n(p.PAID)&&!n(p.PUBLIC)?"Members-only":o.join(" & ")};return e.jsxs(ve,{children:[e.jsx(Ce,{asChild:!0,children:e.jsxs(ne,{variant:"dropdown",children:[e.jsx(Ne,{}),e.jsx("span",{className:"lowercase first-letter:capitalize",children:u()})]})}),e.jsxs(_e,{align:"end",className:"w-full min-w-48",children:[e.jsx(Z,{checked:n(p.PUBLIC),onSelect:o=>c(o,p.PUBLIC),children:"Public visitors"}),e.jsx(Z,{checked:n(p.FREE),onSelect:o=>c(o,p.FREE),children:"Free members"}),a?.paidMembersEnabled&&e.jsx(Z,{checked:n(p.PAID),onSelect:o=>c(o,p.PAID),children:"Paid members"})]})]})},te=()=>{const{range:t,setRange:s}=$();return e.jsxs(Ke,{value:`${t}`,onValueChange:a=>{s(Number(a))},children:[e.jsxs(Ge,{className:"w-auto",children:[e.jsx(Je,{className:"mr-2",size:16,strokeWidth:1.5}),e.jsx(We,{placeholder:"Select a period"})]}),e.jsx(He,{align:"end",children:e.jsxs(Qe,{children:[e.jsx(Ye,{children:"Period"}),Object.values(ue).map(a=>e.jsx(qe,{value:`${a.value}`,children:a.name},a.value))]})})]})};q.registerLocale(pe);const At=t=>de[t]||q.getName(t,"en")||"Unknown",It=t=>{const s={"UNITED STATES":"US","UNITED STATES OF AMERICA":"US",USA:"US","UNITED KINGDOM":"GB",UK:"GB","GREAT BRITAIN":"GB",NETHERLANDS:"NL"},a=t.toUpperCase();return s[a]||(t.length>2?t.substring(0,2):t)},re=({tableHeader:t,data:s,onLocationClick:a})=>e.jsxs(ut,{children:[t&&e.jsxs(dt,{children:[e.jsx(ie,{children:"Country"}),e.jsx(ie,{children:"Visitors"})]}),e.jsx(mt,{children:s.map(i=>{const n=At(`${i.location}`),c=a&&i.location!=="Unknown",u=i.location?i.location.toLowerCase():"unknown";return e.jsxs(pt,{className:c?"cursor-pointer":"","data-testid":`location-row-${u}`,onClick:c?()=>a(i.location):void 0,children:[e.jsx(ht,{style:{width:`${i.percentage?Math.round(i.percentage*100):0}%`}}),e.jsx(gt,{className:"group-hover/data:max-w-[calc(100%-140px)]",children:e.jsxs("div",{className:"flex items-center space-x-3 overflow-hidden",title:n,children:[e.jsx(ot,{countryCode:`${It(i.location)}`,fallback:e.jsx("span",{className:"flex h-[14px] w-[22px] items-center justify-center rounded-[2px] bg-black text-white",children:e.jsx(Ie.SkullAndBones,{className:"size-3"})})}),e.jsx("div",{className:"truncate font-medium",children:n})]})}),e.jsxs(ft,{children:[e.jsx(bt,{children:ke(Number(i.visits))}),e.jsx(xt,{children:Oe(i.percentage)})]})]},i.location||"unknown")})})]}),kt=({data:t,isLoading:s,onLocationClick:a})=>{const i=t.slice(0,10);return e.jsx(e.Fragment,{children:s?"":e.jsx(e.Fragment,{children:t&&t.length>0&&e.jsxs(he,{className:"group/datalist","data-testid":"locations-card",children:[e.jsxs("div",{className:"flex items-center justify-between p-6",children:[e.jsxs(it,{className:"p-0",children:[e.jsx(rt,{children:"Locations"}),e.jsx(lt,{children:"Where are the readers of this post"})]}),e.jsx(Le,{className:"mr-2",children:"Visitors"})]}),e.jsxs(ge,{className:"overflow-hidden",children:[e.jsx(Ee,{}),e.jsx(re,{data:i,tableHeader:!1,onLocationClick:a})]}),t.length>10&&e.jsx(ct,{children:e.jsxs(Fe,{children:[e.jsx(ye,{asChild:!0,children:e.jsxs(ne,{variant:"outline",children:["View all ",e.jsx(jt,{})]})}),e.jsxs(Pe,{className:"overflow-y-auto pt-0 sm:max-w-[600px]",children:[e.jsxs(De,{className:"sticky top-0 z-40 -mx-6 bg-background/60 p-6 backdrop-blur",children:[e.jsx(Te,{children:"Top locations"}),e.jsx(Ae,{children:"Where are the readers of this post"})]}),e.jsx("div",{className:"group/datalist",children:e.jsx(re,{data:t,tableHeader:!0,onLocationClick:a})})]})]})})]})})})};q.registerLocale(pe);const Ot=t=>de[t]||q.getName(t,"en")||t,Mt=({visits:t})=>e.jsx("span",{className:"order-2 font-mono text-xs text-muted-foreground",children:t.toLocaleString()}),wt={utm_source:{endpoint:"api_top_utm_sources",valueKey:"utm_source",transformValue:t=>({value:t||"(not set)",label:t||"(not set)"})},utm_medium:{endpoint:"api_top_utm_mediums",valueKey:"utm_medium",transformValue:t=>({value:t||"(not set)",label:t||"(not set)"})},utm_campaign:{endpoint:"api_top_utm_campaigns",valueKey:"utm_campaign",transformValue:t=>({value:t||"(not set)",label:t||"(not set)"})},utm_content:{endpoint:"api_top_utm_contents",valueKey:"utm_content",transformValue:t=>({value:t||"(not set)",label:t||"(not set)"})},utm_term:{endpoint:"api_top_utm_terms",valueKey:"utm_term",transformValue:t=>({value:t||"(not set)",label:t||"(not set)"})},source:{endpoint:"api_top_sources",valueKey:"source",transformValue:t=>({value:t||"",label:t||"Direct"})},location:{endpoint:"api_top_locations",valueKey:"location",filterItem(t){const s=String(t.location||"");return s!==""&&!me.includes(s)},transformValue:t=>({value:t,label:Ot(t)})},device:{endpoint:"api_top_devices",valueKey:"device",transformValue:t=>({value:t,label:t==="mobile-ios"?"iOS":t==="mobile-android"?"Android":t==="desktop"?"Desktop":t==="bot"?"Bot":t})}},Ut=(t,s,a)=>{const i={...a};return t.forEach(n=>{if(n.field===s||n.values.length===0)return;const c=n.values[0];n.field!=="audience"&&(n.field==="source"||n.field==="device"||n.field==="location"||n.field.startsWith("utm_"))&&(i[n.field]=c)}),i},P=(t,s=[],a,i={})=>{const{enabled:n=!0}=i,{statsConfig:c,range:u}=$(),{startDate:o,endDate:m,timezone:b}=ce(u),h=wt[t],f=l.useMemo(()=>{const N=s.find(v=>v.field==="audience");return fe(N?.values)},[s]),g=l.useMemo(()=>{const N={site_uuid:c?.id||"",date_from:Q(o),date_to:Q(m),timezone:b,member_status:be(f),limit:"50"};return a&&(N.post_uuid=a),Ut(s,t,N)},[c?.id,o,m,b,f,s,t,a]),{data:C,loading:D}=W({endpoint:h?.endpoint||"",statsConfig:c,params:g,enabled:n&&!!h});return{options:l.useMemo(()=>h?(C||[]).filter(v=>h.filterItem?h.filterItem(v):!0).map(v=>{const F=String(v[h.valueKey]??""),y=Number(v.visits)||0,{value:w,label:U}=h.transformValue?h.transformValue(F):{value:F,label:F};return{label:U,value:w,icon:e.jsx(Mt,{visits:y})}}):[],[C,h]),loading:D}};function Rt({filters:t,utmTrackingEnabled:s=!1,onChange:a,...i}){const{appSettings:n}=le(),{post:c}=$(),u=c?.uuid,[o,m]=l.useState(null),[b,h]=l.useState(!1);l.useEffect(()=>{const j=window.matchMedia("(max-width: 1024px)"),_=k=>{h(k.matches)};return _(j),j.addEventListener("change",_),()=>j.removeEventListener("change",_)},[]);const f=l.useMemo(()=>{const j=[{value:"undefined",label:"Public visitors",icon:e.jsx(ae,{className:"text-gray-700"})},{value:"free",label:"Free members",icon:e.jsx(we,{className:"text-green"})},{value:"paid",label:"Paid members",icon:e.jsx(St,{className:"text-orange"})}];return n?.paidMembersEnabled?j:j.filter(_=>_.value!=="paid")},[n?.paidMembersEnabled]),g=l.useCallback(j=>{const _=o===j,k=t.some(O=>O.field===j);return _||k},[o,t]),{options:C,loading:D}=P("utm_source",t,u,{enabled:g("utm_source")}),{options:M,loading:N}=P("utm_medium",t,u,{enabled:g("utm_medium")}),{options:v,loading:F}=P("utm_campaign",t,u,{enabled:g("utm_campaign")}),{options:y,loading:w}=P("utm_content",t,u,{enabled:g("utm_content")}),{options:U,loading:R}=P("utm_term",t,u,{enabled:g("utm_term")}),{options:T,loading:K}=P("source",t,u,{enabled:g("source")}),{options:A,loading:B}=P("device",t,u,{enabled:g("device")}),{options:I,loading:G}=P("location",t,u,{enabled:g("location")}),x=l.useMemo(()=>[{value:"is",label:"is"}],[]),J=l.useMemo(()=>{const j=s?[{key:"utm_source",label:"UTM Source",type:"select",icon:e.jsx(Ft,{className:"size-4"}),placeholder:"Select source",operators:x,defaultOperator:"is",hideOperatorSelect:!0,options:C,isLoading:D,searchable:!0,selectedOptionsClassName:"hidden"},{key:"utm_medium",label:"UTM Medium",type:"select",icon:e.jsx(yt,{className:"size-4"}),placeholder:"Select medium",operators:x,defaultOperator:"is",hideOperatorSelect:!0,options:M,isLoading:N,className:"w-60",popoverContentClassName:"w-60",searchable:!0,selectedOptionsClassName:"hidden"},{key:"utm_campaign",label:"UTM Campaign",type:"select",icon:e.jsx(et,{className:"size-4"}),placeholder:"Select campaign",operators:x,defaultOperator:"is",hideOperatorSelect:!0,options:v,isLoading:F,className:"w-60",popoverContentClassName:"w-60",searchable:!0,selectedOptionsClassName:"hidden"},{key:"utm_content",label:"UTM Content",type:"select",icon:e.jsx(Pt,{className:"size-4"}),placeholder:"Select content",operators:x,defaultOperator:"is",hideOperatorSelect:!0,options:y,isLoading:w,className:"w-60",popoverContentClassName:"w-60",searchable:!0,selectedOptionsClassName:"hidden"},{key:"utm_term",label:"UTM Term",type:"select",icon:e.jsx(Ue,{className:"size-4"}),placeholder:"Select term",operators:x,defaultOperator:"is",hideOperatorSelect:!0,options:U,isLoading:R,className:"w-60",popoverContentClassName:"w-60",searchable:!0,selectedOptionsClassName:"hidden"}]:[];return[{group:"Basic",fields:[{key:"audience",label:"Audience",type:"multiselect",icon:e.jsx(Me,{}),options:f.map(({value:_,label:k,icon:O})=>({value:_,label:k,icon:O})),defaultOperator:"is any of",hideOperatorSelect:!0,autoCloseOnSelect:!0},{key:"source",label:"Source",type:"select",icon:e.jsx(ae,{className:"size-4"}),placeholder:"Select source",operators:x,defaultOperator:"is",hideOperatorSelect:!0,options:T,isLoading:K,className:"w-60",popoverContentClassName:"w-60",searchable:!0,selectedOptionsClassName:"hidden"},{key:"device",label:"Device",type:"select",icon:e.jsx(Lt,{className:"size-4"}),placeholder:"Select device",operators:x,defaultOperator:"is",hideOperatorSelect:!0,options:A,isLoading:B,selectedOptionsClassName:"hidden"},{key:"location",label:"Location",type:"select",icon:e.jsx(Et,{className:"size-4"}),placeholder:"Select location",operators:x,defaultOperator:"is",hideOperatorSelect:!0,options:I,isLoading:G,searchable:!0,selectedOptionsClassName:"hidden"}]},...s?[{group:"UTM parameters",fields:j}]:[]]},[s,C,D,M,N,v,F,y,w,U,R,x,f,T,K,A,B,I,G]),V=t.length>0,X=l.useCallback(()=>{a&&a([])},[a]);return e.jsxs("div",{className:"mt-3 flex w-full justify-between gap-2 lg:mt-0","data-testid":"stats-filter-container",children:[e.jsx(Nt,{addButtonIcon:e.jsx(Xe,{}),addButtonText:V?"Add filter":"Filter",allowMultiple:!1,className:`[&>button]:order-last ${V&&"[&>button]:border-none"}`,fields:J,filters:t,keyboardShortcut:"f",popoverAlign:b||V?"start":"end",showSearchInput:!1,onActiveFieldChange:m,onChange:a||(()=>{}),...i}),V&&e.jsxs(ne,{className:"hidden font-normal text-muted-foreground lg:flex","data-testid":"stats-filter-clear-button",variant:"ghost",onClick:X,children:[e.jsx(Ze,{}),"Clear"]})]})}const Y=["audience","source","device","location","utm_source","utm_medium","utm_campaign","utm_content","utm_term"],xe="__empty__",je="%2C";function Vt(t){const s=new URLSearchParams;return t.forEach(a=>{if(Y.includes(a.field)&&a.values.length>0){const i=a.values.map(n=>n===""?xe:String(n).replace(/,/g,je)).join(",");s.set(a.field,i)}}),s}const se=new Map;function Bt(t){return se.has(t)||se.set(t,`url-${t}-${Date.now()}-${Math.random().toString(36).substring(2,11)}`),se.get(t)}function zt(t){const s=[],a=new Set(Y);return t.forEach((i,n)=>{if(!a.has(n))return;const c=i.split(",").map(u=>u===xe?"":u.replace(new RegExp(je,"g"),","));if(c.length>0){const u=n==="audience"?"is any of":"is";s.push({id:Bt(n),field:n,operator:u,values:c})}}),s}function $t(t={}){const[s,a]=Re(),{onFiltersChange:i}=t,n=l.useRef(!1),c=l.useMemo(()=>zt(s),[s]);l.useEffect(()=>{!n.current&&i&&i(c)},[c,i]);const u=l.useCallback(m=>{n.current=!0;const b=typeof m=="function"?m(c):m,h=Vt(b),f=new URLSearchParams(s);Y.forEach(g=>{f.delete(g)}),h.forEach((g,C)=>{f.set(C,g)}),a(f,{replace:!0}),setTimeout(()=>{n.current=!1},0)},[c,s,a]),o=l.useCallback(()=>{n.current=!0;const m=new URLSearchParams(s);Y.forEach(b=>{m.delete(b)}),a(m,{replace:!0}),setTimeout(()=>{n.current=!1},0)},[s,a]);return{filters:c,setFilters:u,clearFilters:o}}const Es=()=>{const t=Ve(),{postId:s}=Be(),{statsConfig:a,isLoading:i,range:n,audience:c,data:u,post:o,isPostLoading:m}=$(),{filters:b,setFilters:h}=$t(),f=u?.labs?.utmTracking||!1,g=l.useMemo(()=>{if(!f)return c;const r=b.find(S=>S.field==="audience");return fe(r?.values)},[f,c,b]);l.useEffect(()=>{!m&&o?.email_only&&t(`/posts/analytics/${s}`)},[m,o?.email_only,t,s]);const C=l.useMemo(()=>{if(!o?.published_at)return ue.ALL_TIME.value;const r=ze(o.published_at);return n>r?r:n},[o?.published_at,n]),{startDate:D,endDate:M,timezone:N}=ce(C),v=l.useCallback(()=>{const r=document.querySelector(".overflow-y-scroll");r&&r.scrollTo({top:0,behavior:"smooth"})},[]),F=l.useMemo(()=>{const r={};return b.forEach(S=>{const L=S.field,E=S.values;if(L==="audience")return;const d=E&&E.length>0&&E[0]!==null&&E[0]!==void 0,z=L==="source"&&E?.[0]==="";if(d&&(E[0]!==""||z)){const Se=String(E[0]);r[L]=Se}}),r},[b]),y=l.useCallback((r,S)=>{h(L=>L.find(d=>d.field===r)?L.map(d=>d.field===r?{...d,values:[S]}:d):[...L,_t(r,"is",[S])]),v()},[h,v]),w=l.useCallback(r=>y("location",r),[y]),U=l.useCallback(r=>y("source",r),[y]),R=l.useMemo(()=>{const r={site_uuid:a?.id||"",date_from:Q(D),date_to:Q(M),timezone:N,member_status:be(g),post_uuid:"",...F};return!m&&o?.uuid?{...r,post_uuid:o.uuid}:r},[m,o,a?.id,D,M,N,g,F]),{data:T,loading:K}=W({endpoint:"api_kpis",statsConfig:a||{id:""},params:R}),{data:A,loading:B}=W({endpoint:"api_top_locations",statsConfig:a||{id:""},params:R}),{data:I,loading:G}=W({endpoint:"api_top_sources",statsConfig:a||{id:""},params:R}),x=l.useMemo(()=>A?.reduce((r,S)=>r+Number(S.visits),0)||0,[A]),J=l.useMemo(()=>I?I.reduce((r,S)=>r+Number(S.visits||0),0):0,[I]),V=u?.url,X=u?.icon,j=l.useMemo(()=>{const r=A?.map(d=>({location:String(d.location),visits:Number(d.visits),percentage:x>0?Number(d.visits)/x:0,isUnknown:me.includes(String(d.location))}))||[],S=r.filter(d=>!d.isUnknown),L=r.filter(d=>d.isUnknown),E=L.length>0?[{location:"Unknown",visits:L.reduce((d,z)=>d+z.visits,0),percentage:L.reduce((d,z)=>d+z.percentage,0)}]:[];return[...S,...E]},[A,x]),_=i||m||K||B||G,k=tt(T),O=b.length>0;return e.jsxs(e.Fragment,{children:[e.jsx(vt,{currentTab:"Web",children:f?e.jsxs(e.Fragment,{children:[O&&e.jsx(ee,{children:e.jsx(te,{})}),e.jsxs(ee,{className:`${O?"!mt-0 [grid-area:subactions] lg:!mt-[25px]":"[grid-area:actions]"}`,children:[e.jsx(Rt,{filters:b,utmTrackingEnabled:f,onChange:h}),!O&&e.jsx(te,{})]})]}):e.jsxs(ee,{children:[e.jsx(Tt,{}),e.jsx(te,{})]})}),e.jsx(Ct,{children:_?e.jsx(he,{className:"size-full",variant:"plain",children:e.jsx(ge,{className:"size-full items-center justify-center",children:e.jsx($e,{})})}):T&&T.length!==0&&k.visits!=="0"?e.jsxs(e.Fragment,{children:[e.jsx(st,{data:T,range:C}),e.jsxs("div",{className:"flex flex-col gap-6 lg:grid lg:grid-cols-2",children:[e.jsx(kt,{data:j,isLoading:B,onLocationClick:f?w:void 0}),e.jsx(at,{data:I,range:C,siteIcon:X,siteUrl:V,totalVisitors:J,onSourceClick:f?U:void 0})]})]}):e.jsx("div",{className:"grow",children:e.jsx(Dt,{className:"h-full",description:"Try adjusting filters to see more data.",title:`No visitors ${nt(n)}`,children:e.jsx(ae,{strokeWidth:1.5})})})})]})};export{Es as default};
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <link rel="stylesheet" href="/ghost/assets/vendor-0ede59da8efb5e28fa929557f7ff7154.css">
5
5
  <link rel="stylesheet" href="/ghost/assets/ghost-d9b127d91f123e46abdc63e6f541e985.css">
6
- <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22cdnUrl%22%3A%22%22%2C%22editorUrl%22%3A%22%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%226.11%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%2C%22editorFilename%22%3A%22koenig-lexical.umd.js%22%2C%22editorHash%22%3A%2237bd1e3e4d%22%2C%22adminXSettingsFilename%22%3A%22admin-x-settings.js%22%2C%22adminXSettingsHash%22%3A%2292c1311785%22%2C%22activitypubFilename%22%3A%22activitypub.js%22%2C%22activitypubHash%22%3A%229bea379b82%22%2C%22postsFilename%22%3A%22posts.js%22%2C%22postsHash%22%3A%2229fd4c5d66%22%2C%22statsFilename%22%3A%22stats.js%22%2C%22statsHash%22%3A%2264c506812d%22%2C%22activitypubRemoteConfigUrl%22%3A%22%2F.ghost%2Factivitypub%2Fstable%2Fclient-config%22%7D">
6
+ <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22cdnUrl%22%3A%22%22%2C%22editorUrl%22%3A%22%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%226.12%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%2C%22editorFilename%22%3A%22koenig-lexical.umd.js%22%2C%22editorHash%22%3A%2237bd1e3e4d%22%2C%22adminXSettingsFilename%22%3A%22admin-x-settings.js%22%2C%22adminXSettingsHash%22%3A%2225aede0fea%22%2C%22activitypubFilename%22%3A%22activitypub.js%22%2C%22activitypubHash%22%3A%229bea379b82%22%2C%22postsFilename%22%3A%22posts.js%22%2C%22postsHash%22%3A%2229fd4c5d66%22%2C%22statsFilename%22%3A%22stats.js%22%2C%22statsHash%22%3A%2207e4227267%22%2C%22activitypubRemoteConfigUrl%22%3A%22%2F.ghost%2Factivitypub%2Fstable%2Fclient-config%22%7D">
7
7
 
8
8
  <meta charset="UTF-8" />
9
9
 
@@ -17,7 +17,7 @@
17
17
  <meta name="apple-mobile-web-app-title" content="Ghost" />
18
18
  <meta name="apple-mobile-web-app-capable" content="yes" />
19
19
  <meta name="apple-mobile-web-app-status-bar-style" content="black" />
20
- <script type="module" crossorigin src="/ghost/assets/index-BYawr8p9.js"></script>
20
+ <script type="module" crossorigin src="/ghost/assets/index-CJU9a2PB.js"></script>
21
21
  <link rel="stylesheet" crossorigin href="/ghost/assets/index-Ip63LVtf.css">
22
22
  </head>
23
23
  <body class="react-admin">
@@ -38,7 +38,7 @@
38
38
  <div id="ember-liquid-wormhole"></div>
39
39
  <script src="/ghost/assets/vendor-5d0617fe9c4d9e94211f5ffdfde620aa.js"></script>
40
40
  <script src="/ghost/assets/chunk.397.a720333cfffc99c47e71.js"></script>
41
- <script src="/ghost/assets/chunk.524.1289543297329587cf8a.js"></script>
42
- <script src="/ghost/assets/ghost-9aa1e7c5992f122dba6932af78bf8e56.js"></script>
41
+ <script src="/ghost/assets/chunk.524.74a9629dd2ba0d21bbef.js"></script>
42
+ <script src="/ghost/assets/ghost-6367d022df9db9dacbcb9bfa30232ec7.js"></script>
43
43
  </body>
44
44
  </html>
@@ -6,7 +6,7 @@
6
6
  <title>Ghost</title>
7
7
 
8
8
 
9
- <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22cdnUrl%22%3A%22%22%2C%22editorUrl%22%3A%22%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%226.11%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%2C%22editorFilename%22%3A%22koenig-lexical.umd.js%22%2C%22editorHash%22%3A%2237bd1e3e4d%22%2C%22adminXSettingsFilename%22%3A%22admin-x-settings.js%22%2C%22adminXSettingsHash%22%3A%2292c1311785%22%2C%22activitypubFilename%22%3A%22activitypub.js%22%2C%22activitypubHash%22%3A%229bea379b82%22%2C%22postsFilename%22%3A%22posts.js%22%2C%22postsHash%22%3A%2229fd4c5d66%22%2C%22statsFilename%22%3A%22stats.js%22%2C%22statsHash%22%3A%2264c506812d%22%2C%22activitypubRemoteConfigUrl%22%3A%22%2F.ghost%2Factivitypub%2Fstable%2Fclient-config%22%7D" />
9
+ <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22cdnUrl%22%3A%22%22%2C%22editorUrl%22%3A%22%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%226.12%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%2C%22editorFilename%22%3A%22koenig-lexical.umd.js%22%2C%22editorHash%22%3A%2237bd1e3e4d%22%2C%22adminXSettingsFilename%22%3A%22admin-x-settings.js%22%2C%22adminXSettingsHash%22%3A%2225aede0fea%22%2C%22activitypubFilename%22%3A%22activitypub.js%22%2C%22activitypubHash%22%3A%229bea379b82%22%2C%22postsFilename%22%3A%22posts.js%22%2C%22postsHash%22%3A%2229fd4c5d66%22%2C%22statsFilename%22%3A%22stats.js%22%2C%22statsHash%22%3A%2207e4227267%22%2C%22activitypubRemoteConfigUrl%22%3A%22%2F.ghost%2Factivitypub%2Fstable%2Fclient-config%22%7D" />
10
10
 
11
11
  <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1, minimal-ui, viewport-fit=cover" />
12
12
  <meta name="pinterest" content="nopin" />
@@ -49,7 +49,7 @@
49
49
 
50
50
  <script src="assets/vendor-5d0617fe9c4d9e94211f5ffdfde620aa.js"></script>
51
51
  <script src="assets/chunk.397.a720333cfffc99c47e71.js"></script>
52
- <script src="assets/chunk.524.1289543297329587cf8a.js"></script>
53
- <script src="assets/ghost-9aa1e7c5992f122dba6932af78bf8e56.js"></script>
52
+ <script src="assets/chunk.524.74a9629dd2ba0d21bbef.js"></script>
53
+ <script src="assets/ghost-6367d022df9db9dacbcb9bfa30232ec7.js"></script>
54
54
  </body>
55
55
  </html>
@@ -4,5 +4,6 @@ module.exports = {
4
4
  frontendCaching: require('./frontend-caching'),
5
5
  handleImageSizes: require('./handle-image-sizes'),
6
6
  redirectGhostToAdmin: require('./redirect-ghost-to-admin'),
7
+ serveIndexNowKey: require('./serve-indexnow-key'),
7
8
  staticTheme: require('./static-theme')
8
9
  };