ghost 6.54.0 → 6.54.1

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 (238) hide show
  1. package/components/ghost-storage-base-3.0.0.tgz +0 -0
  2. package/components/tryghost-adapter-base-cache-0.2.0.tgz +0 -0
  3. package/components/tryghost-adapter-base-scheduling-0.2.0.tgz +0 -0
  4. package/components/tryghost-adapter-base-sso-0.1.1.tgz +0 -0
  5. package/components/tryghost-kg-default-nodes-2.1.3.tgz +0 -0
  6. package/core/built/admin/assets/Growth-BTP1LthE.js +3 -0
  7. package/core/built/admin/assets/Newsletters-CSEX0myc.js +1 -0
  8. package/core/built/admin/assets/Overview-BjACEsJF.js +1 -0
  9. package/core/built/admin/assets/Web-CxxxjCcv.js +2 -0
  10. package/core/built/admin/assets/{account-migration-DLvVA5yq.js → account-migration-BklF2I_I.js} +1 -1
  11. package/core/built/admin/assets/activitypub/{account-migration-DHbZcxGM.js → account-migration-CNovr6W-.js} +4 -4
  12. package/core/built/admin/assets/activitypub/activitypub.js +2 -2
  13. package/core/built/admin/assets/activitypub/{bluesky-sharing-zfxUey_L.js → bluesky-sharing-Ceslb1_M.js} +4 -4
  14. package/core/built/admin/assets/activitypub/{dist-BqkDUQxJ2.js → dist-ByFmDSNP2.js} +64 -63
  15. package/core/built/admin/assets/activitypub/{dist-Ba_QxHHl.js → dist-DHAjBcV3.js} +2 -2
  16. package/core/built/admin/assets/activitypub/{domain-CmwSZLHK.js → domain-C1qQvJ8C.js} +5 -5
  17. package/core/built/admin/assets/activitypub/{edit-profile-CXdwNmVG.js → edit-profile-BcH-jEfM.js} +3 -3
  18. package/core/built/admin/assets/activitypub/{explore-DfbjzGM1.js → explore-AxwBh9dI.js} +3 -3
  19. package/core/built/admin/assets/activitypub/{feed-DSEBJOqf.js → feed-BaOlbh7a.js} +3 -3
  20. package/core/built/admin/assets/activitypub/{field-CY7XVcx6.js → field-B7mYYQpN.js} +2 -2
  21. package/core/built/admin/assets/activitypub/{inbox-DtQ0kytT.js → inbox-vXez-5uJ.js} +4 -4
  22. package/core/built/admin/assets/activitypub/{label-Dw96GQ7u.js → label-Chv5T8bw.js} +2 -2
  23. package/core/built/admin/assets/activitypub/layout-CziktJXo.js +1 -0
  24. package/core/built/admin/assets/activitypub/{moderation-Dg_-I-8C.js → moderation-DtSM2i1I.js} +4 -4
  25. package/core/built/admin/assets/activitypub/{note-Cy1-uKMY.js → note-Dckp4S-2.js} +3 -3
  26. package/core/built/admin/assets/activitypub/{notifications-B_fvoLIM.js → notifications-CG5T22vg.js} +3 -3
  27. package/core/built/admin/assets/activitypub/{preferences-ByJseZp6.js → preferences-D_799jdl.js} +6 -6
  28. package/core/built/admin/assets/activitypub/{profile-BFtbnIjz.js → profile-D2JfXBQl.js} +6 -6
  29. package/core/built/admin/assets/activitypub/{routes-Dh3xXfce.js → routes-CCHe2dQp.js} +28 -25
  30. package/core/built/admin/assets/activitypub/{settings-DTgqJPxM.js → settings-kx-9Enkz.js} +3 -3
  31. package/core/built/admin/assets/activitypub/{site-CdL9ZLqm.js → site-x4_IjVJ0.js} +2 -2
  32. package/core/built/admin/assets/activitypub/{tabs-ogqwoBlb.js → tabs-CyPRQQ1N.js} +3 -3
  33. package/core/built/admin/assets/activitypub/{use-reply-chain-data-CxonteFD.js → use-reply-chain-data-BAB6fNGt.js} +2 -2
  34. package/core/built/admin/assets/{audience-BKRdsFmy.js → audience-X_XsZivI.js} +1 -1
  35. package/core/built/admin/assets/{automated-emails-Cn87L5Md.js → automated-emails-of1MvVsv.js} +1 -1
  36. package/core/built/admin/assets/{automations-BP_aHamJ.js → automations-DRFjW5fw.js} +1 -1
  37. package/core/built/admin/assets/{bluesky-sharing-Bh36XPh4.js → bluesky-sharing-BbbjWdzs.js} +1 -1
  38. package/core/built/admin/assets/{breadcrumb-D34YWnaw.js → breadcrumb-B-M9Ip_2.js} +1 -1
  39. package/core/built/admin/assets/{chart-helpers-DbklaJw9.js → chart-helpers-xiSsW8r0.js} +1 -1
  40. package/core/built/admin/assets/checkbox-EhJKHFdZ.js +1 -0
  41. package/core/built/admin/assets/{chunk.962.b73442b07be930bb5d85.js → chunk.211.6f7328d63c41536451b3.js} +737 -559
  42. package/core/built/admin/assets/{chunk.962.b73442b07be930bb5d85.js.LICENSE.txt → chunk.211.6f7328d63c41536451b3.js.LICENSE.txt} +2 -0
  43. package/core/built/admin/assets/{chunk.589.096f4d0bb775e5229aa9.js → chunk.361.3cdb584b973959e52ccc.js} +3 -3
  44. package/core/built/admin/assets/chunk.524.8365cd9280405c0f6216.js +25 -0
  45. package/core/built/admin/assets/chunk.582.61d078937e6102769f2c.js +27 -0
  46. package/core/built/admin/assets/code-editor-view-CZtJFGhR.js +1 -0
  47. package/core/built/admin/assets/comments-CvyXxOyN.js +1 -0
  48. package/core/built/admin/assets/{date-range-select-B5vSsrpx.js → date-range-select-CTlyo8zW.js} +1 -1
  49. package/core/built/admin/assets/{disabled-sources-indicator-NkOIoMue.js → disabled-sources-indicator-qs2GfLvl.js} +1 -1
  50. package/core/built/admin/assets/dist-2Tnz2Yfq.js +1 -0
  51. package/core/built/admin/assets/dist-CjY-f5Z1.js +1 -0
  52. package/core/built/admin/assets/dist-DIC8yz5C.js +1 -0
  53. package/core/built/admin/assets/{domain-B7_n5nfx.js → domain-CPNXKVOV.js} +1 -1
  54. package/core/built/admin/assets/dropzone-BmCXnw6J.js +5 -0
  55. package/core/built/admin/assets/{edit-profile-rvDGrS8J.js → edit-profile-SGrJve5M.js} +1 -1
  56. package/core/built/admin/assets/editor-BOG2YPUm.js +8 -0
  57. package/core/built/admin/assets/{explore-BZAZOg5X.js → explore-CUYLv9G9.js} +1 -1
  58. package/core/built/admin/assets/{feed-CFV8xDw9.js → feed-CPdJMttL.js} +1 -1
  59. package/core/built/admin/assets/{field-BW-M2Zwp.js → field-D0XISCK2.js} +1 -1
  60. package/core/built/admin/assets/{filter-sources-Fx8wiYYw.js → filter-sources-Bieps75g.js} +1 -1
  61. package/core/built/admin/assets/{filters-CGX_pf2N.js → filters-CuB-A7ma.js} +1 -1
  62. package/core/built/admin/assets/filters-bXkkWro8.js +1 -0
  63. package/core/built/admin/assets/{ghost-b1dce91ad3232cc259ee5fbbf9526243.js → ghost-05f9a7182ed56903dba05878a5b8422b.js} +290 -289
  64. package/core/built/admin/assets/{gift-link-modal-Bk8qpnMw.js → gift-link-modal-su8MsRdg.js} +1 -1
  65. package/core/built/admin/assets/{growth-Ck2s3JjR.js → growth-Ba6S5FQX.js} +1 -1
  66. package/core/built/admin/assets/{inbox-BRp1_aaC.js → inbox-Xx1CdnfO.js} +8 -8
  67. package/core/built/admin/assets/index-D8PbzuT9.css +1 -0
  68. package/core/built/admin/assets/index-ukW_0Uie.js +67 -0
  69. package/core/built/admin/assets/input-group-CGOXcy4l.js +1 -0
  70. package/core/built/admin/assets/input-surface-BpAjZXY5.js +1 -0
  71. package/core/built/admin/assets/{koenig-lexical-CM7UFNdL.js → koenig-lexical-B61IALf5.js} +1 -1
  72. package/core/built/admin/assets/{kpi-card-CIGyijjx.js → kpi-card-BlZaG1Lo.js} +1 -1
  73. package/core/built/admin/assets/{kpi-card-BrGH6FsT.js → kpi-card-DCdlyaSS.js} +1 -1
  74. package/core/built/admin/assets/{kpi-helpers-_HRRsklE.js → kpi-helpers-DpAuS1Nb.js} +1 -1
  75. package/core/built/admin/assets/{kpi-tabs-BSvh9eoq.js → kpi-tabs-Dme44bQS.js} +1 -1
  76. package/core/built/admin/assets/{label-BOR9XdKl.js → label-dSs5aepE.js} +1 -1
  77. package/core/built/admin/assets/{label-picker-BdNAWuUX.js → label-picker-Uq91atex.js} +1 -1
  78. package/core/built/admin/assets/layout-WUcz6tu1.js +1 -0
  79. package/core/built/admin/assets/{member-custom-fields-DvFyamLu.js → member-custom-fields-NCzrMuba.js} +1 -1
  80. package/core/built/admin/assets/member-detail-DPWDtYnN.js +1 -0
  81. package/core/built/admin/assets/{members-DsPxYAVm.js → members-B9rO7qr4.js} +2 -2
  82. package/core/built/admin/assets/modals-CxRaan1J.js +31 -0
  83. package/core/built/admin/assets/{moderation-Dlp7M5sa.js → moderation-D8zon60E.js} +1 -1
  84. package/core/built/admin/assets/{multi-select-combobox-CH1o8XXQ.js → multi-select-combobox-1wYm3nle.js} +1 -1
  85. package/core/built/admin/assets/newsletter-DbYMRxRS.js +1 -0
  86. package/core/built/admin/assets/{note-BrAZ7Z0o.js → note-PiWPnnrh.js} +1 -1
  87. package/core/built/admin/assets/{notifications-BnbHLOPC.js → notifications-DEgqqB9G.js} +1 -1
  88. package/core/built/admin/assets/{onboarding-route-eU146kuA.js → onboarding-route-BzF6HeVn.js} +1 -1
  89. package/core/built/admin/assets/{overview-BpbaK-xu.js → overview-DixLeIqY.js} +1 -1
  90. package/core/built/admin/assets/{page-header-C0jVxtS8.js → page-header-op0eN36I.js} +1 -1
  91. package/core/built/admin/assets/{post-analytics-Iw7dk1mT.js → post-analytics-WwRDEnrV.js} +1 -1
  92. package/core/built/admin/assets/post-analytics-header-DsMoLx0R.js +1 -0
  93. package/core/built/admin/assets/{post-analytics-provider-BDqcfBor.js → post-analytics-provider-BJCPLMIb.js} +1 -1
  94. package/core/built/admin/assets/{post-share-modal-DBfKl2GZ.js → post-share-modal-Dx-MEjhI.js} +1 -1
  95. package/core/built/admin/assets/preferences-D7-j6A4C.js +5 -0
  96. package/core/built/admin/assets/profile-Dl69QPp0.js +1 -0
  97. package/core/built/admin/assets/select-C1qDZnW4.js +1 -0
  98. package/core/built/admin/assets/settings-BbmC_Iqq.js +4 -0
  99. package/core/built/admin/assets/{settings-Bz3RZRmE.js → settings-H6HxFgfI.js} +1 -1
  100. package/core/built/admin/assets/shade-app-B3heOAfz-CGXQwWeO.js +3 -0
  101. package/core/built/admin/assets/{share-modal-CkdTTMJd.js → share-modal-BJCadJyp.js} +1 -1
  102. package/core/built/admin/assets/social-urls-BPL1nADp.js +8 -0
  103. package/core/built/admin/assets/{sort-button-DZp9Y2r1.js → sort-button-DyYlfYp7.js} +1 -1
  104. package/core/built/admin/assets/{source-icon-CHr9qJ2Y.js → source-icon-_ubRDbg_.js} +1 -1
  105. package/core/built/admin/assets/{stats-DGoXZxWE.js → stats-BQZMGMvn.js} +1 -1
  106. package/core/built/admin/assets/{stats-view-D2-1L0ms.js → stats-view-Doei-qCX.js} +1 -1
  107. package/core/built/admin/assets/{step-1-RdahbwyG.js → step-1-IKiLBPoC.js} +1 -1
  108. package/core/built/admin/assets/{step-2-D83PeRwd.js → step-2-jJ41PsDN.js} +1 -1
  109. package/core/built/admin/assets/{step-3-p_Op4wv4.js → step-3-CaqFAEqf.js} +2 -2
  110. package/core/built/admin/assets/switch-t-WyENU2.js +1 -0
  111. package/core/built/admin/assets/{table-B8LgTQJZ.js → table-DxUL78jU.js} +1 -1
  112. package/core/built/admin/assets/{tabs-D3ZOYkM7.js → tabs-BQcJQ1ke.js} +1 -1
  113. package/core/built/admin/assets/{tags-B4l891z2.js → tags-CNujGwkT.js} +1 -1
  114. package/core/built/admin/assets/textarea-Bjccvh_E.js +1 -0
  115. package/core/built/admin/assets/{toggle-group-DNXDkAwf.js → toggle-group-BeEpQ69p.js} +1 -1
  116. package/core/built/admin/assets/{topic-filter-DZGjEcz3.js → topic-filter-Bb5MOD-1.js} +1 -1
  117. package/core/built/admin/assets/{use-analytics-data-CaT8RirX.js → use-analytics-data-Cds6XDjg.js} +1 -1
  118. package/core/built/admin/assets/use-filter-params-DjXkhO54.js +1 -0
  119. package/core/built/admin/assets/{use-growth-stats-9Db2CuJe.js → use-growth-stats-D8uf98-G.js} +1 -1
  120. package/core/built/admin/assets/{use-post-referrers-BV54YcQS.js → use-post-referrers-CRtgyuXB.js} +1 -1
  121. package/core/built/admin/assets/{use-reply-chain-data-DuYZGDan.js → use-reply-chain-data-DbKYX50v.js} +1 -1
  122. package/core/built/admin/assets/{use-simple-pagination-8fTua9Nt.js → use-simple-pagination-DC01kpo0.js} +1 -1
  123. package/core/built/admin/assets/{use-tinybird-query-Dz156HvZ.js → use-tinybird-query-C7bQRJWw.js} +1 -1
  124. package/core/built/admin/assets/{use-tinybird-token-C9RUdL_n.js → use-tinybird-token-Az4tam7_.js} +1 -1
  125. package/core/built/admin/assets/{virtual-list-BCvP0YF-.js → virtual-list-Dhuh9fGx.js} +1 -1
  126. package/core/built/admin/assets/web-LtHNiNBV.js +1 -0
  127. package/core/built/admin/index.html +11 -7
  128. package/core/frontend/services/proxy.js +11 -1
  129. package/core/server/adapters/storage/LocalFilesStorage.js +13 -11
  130. package/core/server/adapters/storage/LocalFilesStorage.ts +24 -0
  131. package/core/server/adapters/storage/LocalImagesStorage.js +14 -12
  132. package/core/server/adapters/storage/LocalImagesStorage.ts +24 -0
  133. package/core/server/adapters/storage/LocalMediaStorage.js +13 -11
  134. package/core/server/adapters/storage/LocalMediaStorage.ts +24 -0
  135. package/core/server/adapters/storage/LocalStorageBase.js +107 -167
  136. package/core/server/adapters/storage/LocalStorageBase.ts +342 -0
  137. package/core/server/adapters/storage/utils.js +36 -50
  138. package/core/server/adapters/storage/utils.ts +60 -0
  139. package/core/server/api/endpoints/db.js +6 -0
  140. package/core/server/api/endpoints/members.js +25 -28
  141. package/core/server/api/endpoints/pages.js +6 -1
  142. package/core/server/api/endpoints/posts.js +11 -2
  143. package/core/server/api/endpoints/utils/serializers/output/mappers/comments.js +4 -1
  144. package/core/server/api/endpoints/utils/serializers/output/members.js +18 -87
  145. package/core/server/data/exporter/export-filename.js +2 -1
  146. package/core/server/data/importer/importers/data/revue-subscriber-importer.js +6 -10
  147. package/core/server/data/importer/importers/json-to-html.js +24 -4
  148. package/core/server/lib/image/image-size.js +3 -17
  149. package/core/server/lib/image/image-utils.js +15 -1
  150. package/core/server/lib/request-external.js +1 -1
  151. package/core/server/models/user.js +46 -70
  152. package/core/server/services/auth/session/session-service.js +28 -1
  153. package/core/server/services/automations/automations-api.js +6 -6
  154. package/core/server/services/automations/automations-api.ts +6 -6
  155. package/core/server/services/automations/automations-repository.ts +1 -0
  156. package/core/server/services/automations/database-automations-repository.js +7 -2
  157. package/core/server/services/automations/database-automations-repository.ts +8 -2
  158. package/core/server/services/comments/comments-service-emails.js +4 -1
  159. package/core/server/services/members/{importer → import-export}/config.js +4 -9
  160. package/core/server/services/members/{importer → import-export}/config.ts +4 -9
  161. package/core/server/services/members/{csv → import-export/csv}/index.js +3 -3
  162. package/core/server/services/members/import-export/csv/index.ts +2 -0
  163. package/core/server/services/members/import-export/csv/parse.js +64 -0
  164. package/core/server/services/members/import-export/csv/parse.ts +69 -0
  165. package/core/server/services/members/import-export/csv/serialize.js +13 -0
  166. package/core/server/services/members/import-export/csv/serialize.ts +18 -0
  167. package/core/server/services/members/import-export/export/exporter.js +202 -0
  168. package/core/server/services/members/import-export/export/exporter.ts +325 -0
  169. package/core/server/services/members/import-export/import/completion-email.js +65 -0
  170. package/core/server/services/members/import-export/import/completion-email.ts +119 -0
  171. package/core/server/services/members/import-export/import/importer.js +276 -0
  172. package/core/server/services/members/import-export/import/importer.ts +430 -0
  173. package/core/server/services/members/import-export/import/reader.js +32 -0
  174. package/core/server/services/members/import-export/import/reader.ts +33 -0
  175. package/core/server/services/members/import-export/import/row.js +33 -0
  176. package/core/server/services/members/import-export/import/row.ts +52 -0
  177. package/core/server/services/members/import-export/import/spool.js +30 -0
  178. package/core/server/services/members/import-export/import/spool.ts +38 -0
  179. package/core/server/services/members/import-export/index.js +90 -0
  180. package/core/server/services/members/import-export/index.ts +118 -0
  181. package/core/server/services/members/members-api/controllers/router-controller.js +7 -0
  182. package/core/server/services/members/service.js +17 -19
  183. package/core/server/services/posts/posts-exporter.js +6 -4
  184. package/core/server/services/posts/posts-service.js +2 -2
  185. package/core/server/services/themes/storage.js +9 -0
  186. package/core/server/services/themes/theme-storage.js +1 -1
  187. package/core/shared/config/defaults.json +2 -1
  188. package/core/shared/express.js +6 -1
  189. package/core/shared/labs.js +2 -1
  190. package/package.json +9 -9
  191. package/pnpm-lock.yaml +17 -17
  192. package/pnpm-workspace.yaml +7 -7
  193. package/components/tryghost-adapter-base-scheduling-0.1.1.tgz +0 -0
  194. package/core/built/admin/assets/Growth-CSaHoSVD.js +0 -3
  195. package/core/built/admin/assets/Newsletters-C5cs6FGo.js +0 -1
  196. package/core/built/admin/assets/Overview-j4NaeUNm.js +0 -1
  197. package/core/built/admin/assets/Web-_fD935OX.js +0 -2
  198. package/core/built/admin/assets/activitypub/layout-IdVq3lRy.js +0 -1
  199. package/core/built/admin/assets/checkbox-DA4-1UiI.js +0 -1
  200. package/core/built/admin/assets/chunk.524.45e0875f41b71e46e849.js +0 -25
  201. package/core/built/admin/assets/chunk.582.51defd4b009f0de8d4d5.js +0 -27
  202. package/core/built/admin/assets/code-editor-view-BKBrkffZ.js +0 -1
  203. package/core/built/admin/assets/comments-CzVNIT8b.js +0 -1
  204. package/core/built/admin/assets/dist-CT46_f_J.js +0 -1
  205. package/core/built/admin/assets/dropzone-DcuJEEUf.js +0 -5
  206. package/core/built/admin/assets/editor-BCiIyFjm.js +0 -8
  207. package/core/built/admin/assets/filters-DtcXMZDU.js +0 -1
  208. package/core/built/admin/assets/index-BBf502Wg.js +0 -69
  209. package/core/built/admin/assets/index-BCCZKxP2.css +0 -1
  210. package/core/built/admin/assets/input-group-DjuYnNCd.js +0 -1
  211. package/core/built/admin/assets/layout-Bw4GnxXp.js +0 -1
  212. package/core/built/admin/assets/member-detail-Cg2vTqvJ.js +0 -1
  213. package/core/built/admin/assets/modals-Bf_fyvHZ.js +0 -31
  214. package/core/built/admin/assets/newsletter-CQ5CAYUI.js +0 -1
  215. package/core/built/admin/assets/post-analytics-header-D9pJ4iNm.js +0 -1
  216. package/core/built/admin/assets/preferences-D4EANGoc.js +0 -5
  217. package/core/built/admin/assets/profile-dJ44Bn_W.js +0 -1
  218. package/core/built/admin/assets/select--2uVN9_-.js +0 -1
  219. package/core/built/admin/assets/settings-SD9bxIpt.js +0 -4
  220. package/core/built/admin/assets/social-urls-BvFZwYcE.js +0 -8
  221. package/core/built/admin/assets/switch-qp518gFQ.js +0 -1
  222. package/core/built/admin/assets/textarea-CTlb3Uu6.js +0 -1
  223. package/core/built/admin/assets/use-filter-params-DeQ8sX4N.js +0 -1
  224. package/core/built/admin/assets/web-DTZnnUGr.js +0 -1
  225. package/core/server/services/mail/templates/newsletter.html +0 -876
  226. package/core/server/services/members/csv/index.ts +0 -3
  227. package/core/server/services/members/csv/parse.js +0 -94
  228. package/core/server/services/members/csv/parse.ts +0 -111
  229. package/core/server/services/members/csv/types.js +0 -2
  230. package/core/server/services/members/csv/types.ts +0 -39
  231. package/core/server/services/members/csv/unparse.js +0 -69
  232. package/core/server/services/members/csv/unparse.ts +0 -79
  233. package/core/server/services/members/exporter/query.js +0 -233
  234. package/core/server/services/members/importer/index.js +0 -30
  235. package/core/server/services/members/importer/labels.js +0 -125
  236. package/core/server/services/members/importer/members-csv-importer.js +0 -520
  237. /package/core/server/services/members/{importer → import-export/import}/email-template.js +0 -0
  238. /package/core/server/services/members/{importer/members-csv-importer-stripe-utils.js → import-export/import/stripe-utils.js} +0 -0
@@ -1,3 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{d as r,g as i,l as a,n as o}from"./stats-DGoXZxWE.js";import{t as s}from"./currency-CQsJu8iC.js";import{r as c,t as l}from"./source-icon-CHr9qJ2Y.js";import{g as u}from"./chunk-KS7C4IRE-DG9HTHQ3.js";import{a as d}from"./router-provider-C1R4AZ2o.js";import{b as f,f as p,l as m,x as h,y as g}from"./dist-DGzPJ_bO.js";import{E as _}from"./_baseAssignValue-C_vooEQc.js";import{$ as v,C as y,E as b,I as x,J as S,K as C,P as w,Q as T,S as E,Y as D,Z as ee,_ as te,a as ne,at as re,b as ie,ct as ae,dt as oe,et as se,g as ce,i as le,it as ue,n as de,nt as fe,ot as O,r as pe,st as me,ut as he,w as ge,x as _e,y as ve}from"./chart-BuRT2Y6p.js";import{n as ye,t as be}from"./PolarAngleAxis-BGjf7sBu.js";import{a as xe,c as Se,i as k,l as Ce,n as A,r as we,t as Te,u as Ee}from"./chart-helpers-DbklaJw9.js";import{n as De,t as j}from"./sort-button-DZp9Y2r1.js";import{i as Oe,r as ke,t as Ae}from"./tabs-D3ZOYkM7.js";import{i as je,n as Me,o as Ne,s as Pe,t as Fe}from"./select--2uVN9_-.js";import{a as Ie,n as M,o as Le,r as Re,t as N}from"./card-DGoDJzrn.js";import{t as P}from"./empty-indicator-oX1u1Pkn.js";import{a as F,c as I,i as ze,n as L,r as R,s as Be,t as Ve}from"./table-B8LgTQJZ.js";import{$n as He,Br as z,Fn as Ue,Hr as B,In as We,Ir as Ge,Jr as Ke,Lo as qe,Mn as Je,Nn as Ye,Pn as Xe,Qr as Ze,Wn as Qe,Wr as $e,Xr as et,Zs as tt,c as V,d as nt,da as rt,fs as it,hs as at,ii as ot,jn as st,ms as ct,r as lt,tr as ut,zr as H}from"./index-BBf502Wg.js";import{n as dt,r as U,t as ft}from"./kpi-tabs-BSvh9eoq.js";import{a as pt}from"./tiers-BgYLWRJv.js";import{i as mt,n as ht,r as gt,t as _t}from"./stats-view-D2-1L0ms.js";import{t as vt}from"./disabled-sources-indicator-NkOIoMue.js";import{t as yt}from"./use-growth-stats-9Db2CuJe.js";import{t as bt}from"./use-analytics-data-CaT8RirX.js";import{n as xt}from"./audience-BKRdsFmy.js";import{n as St}from"./referrers-BCfFYSHc.js";import{i as Ct,r as wt,t as W}from"./content-helpers-CNBPrwsi.js";import{t as Tt}from"./url-helpers-CCyfRrKj.js";var G=e(t()),Et=e(oe()),Dt=e(x()),K=e(he()),q=e(_()),Ot;function J(e){"@babel/helpers - typeof";return J=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},J(e)}function Y(){return Y=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Y.apply(this,arguments)}function kt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function X(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?kt(Object(n),!0).forEach(function(t){Z(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):kt(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function At(e,t){if(!(e instanceof t))throw TypeError(`Cannot call a class as a function`)}function jt(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,`value`in r&&(r.writable=!0),Object.defineProperty(e,Bt(r.key),r)}}function Mt(e,t,n){return t&&jt(e.prototype,t),n&&jt(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function Nt(e,t,n){return t=Lt(t),Pt(e,It()?Reflect.construct(t,n||[],Lt(e).constructor):t.apply(e,n))}function Pt(e,t){if(t&&(J(t)===`object`||typeof t==`function`))return t;if(t!==void 0)throw TypeError(`Derived constructors may only return object or undefined`);return Ft(e)}function Ft(e){if(e===void 0)throw ReferenceError(`this hasn't been initialised - super() hasn't been called`);return e}function It(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(It=function(){return!!e})()}function Lt(e){return Lt=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Lt(e)}function Rt(e,t){if(typeof t!=`function`&&t!==null)throw TypeError(`Super expression must either be null or a function`);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&zt(e,t)}function zt(e,t){return zt=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},zt(e,t)}function Z(e,t,n){return t=Bt(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Bt(e){var t=Vt(e,`string`);return J(t)==`symbol`?t:t+``}function Vt(e,t){if(J(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(J(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var Q=function(e){function t(e){var n;return At(this,t),n=Nt(this,t,[e]),Z(n,`pieRef`,null),Z(n,`sectorRefs`,[]),Z(n,`id`,ae(`recharts-pie-`)),Z(n,`handleAnimationEnd`,function(){var e=n.props.onAnimationEnd;n.setState({isAnimationFinished:!0}),(0,q.default)(e)&&e()}),Z(n,`handleAnimationStart`,function(){var e=n.props.onAnimationStart;n.setState({isAnimationFinished:!1}),(0,q.default)(e)&&e()}),n.state={isAnimationFinished:!e.isAnimationActive,prevIsAnimationActive:e.isAnimationActive,prevAnimationId:e.animationId,sectorToFocus:0},n}return Rt(t,e),Mt(t,[{key:`isActiveIndex`,value:function(e){var t=this.props.activeIndex;return Array.isArray(t)?t.indexOf(e)!==-1:e===t}},{key:`hasActiveIndex`,value:function(){var e=this.props.activeIndex;return Array.isArray(e)?e.length!==0:e||e===0}},{key:`renderLabels`,value:function(e){if(this.props.isAnimationActive&&!this.state.isAnimationFinished)return null;var n=this.props,r=n.label,i=n.labelLine,a=n.dataKey,o=n.valueKey,s=v(this.props,!1),c=v(r,!1),l=v(i,!1),u=r&&r.offsetRadius||20,d=e.map(function(e,n){var d=(e.startAngle+e.endAngle)/2,f=b(e.cx,e.cy,e.outerRadius+u,d),p=X(X(X(X({},s),e),{},{stroke:`none`},c),{},{index:n,textAnchor:t.getTextAnchor(f.x,e.cx)},f),m=X(X(X(X({},s),e),{},{fill:`none`,stroke:e.fill},l),{},{index:n,points:[b(e.cx,e.cy,e.outerRadius,d),f]}),h=a;return(0,K.default)(a)&&(0,K.default)(o)?h=`value`:(0,K.default)(a)&&(h=o),G.createElement(T,{key:`label-${e.startAngle}-${e.endAngle}-${e.midAngle}-${n}`},i&&t.renderLabelLineItem(i,m,`line`),t.renderLabelItem(r,p,w(e,h)))});return G.createElement(T,{className:`recharts-pie-labels`},d)}},{key:`renderSectorsStatically`,value:function(e){var t=this,n=this.props,r=n.activeShape,i=n.blendStroke,a=n.inactiveShape;return e.map(function(n,o){if(n?.startAngle===0&&n?.endAngle===0&&e.length!==1)return null;var s=t.isActiveIndex(o),c=a&&t.hasActiveIndex()?a:null,l=s?r:c,u=X(X({},n),{},{stroke:i?n.fill:n.stroke,tabIndex:-1});return G.createElement(T,Y({ref:function(e){e&&!t.sectorRefs.includes(e)&&t.sectorRefs.push(e)},tabIndex:-1,className:`recharts-pie-sector`},fe(t.props,n,o),{key:`sector-${n?.startAngle}-${n?.endAngle}-${n.midAngle}-${o}`}),G.createElement(te,Y({option:l,isActive:s,shapeType:`sector`},u)))})}},{key:`renderSectorsWithAnimation`,value:function(){var e=this,t=this.props,n=t.sectors,r=t.isAnimationActive,i=t.animationBegin,a=t.animationDuration,o=t.animationEasing,s=t.animationId,c=this.state,l=c.prevSectors,u=c.prevIsAnimationActive;return G.createElement(ve,{begin:i,duration:a,isActive:r,easing:o,from:{t:0},to:{t:1},key:`pie-${s}-${u}`,onAnimationStart:this.handleAnimationStart,onAnimationEnd:this.handleAnimationEnd},function(t){var r=t.t,i=[],a=(n&&n[0]).startAngle;return n.forEach(function(e,t){var n=l&&l[t],o=t>0?(0,Et.default)(e,`paddingAngle`,0):0;if(n){var s=re(n.endAngle-n.startAngle,e.endAngle-e.startAngle),c=X(X({},e),{},{startAngle:a+o,endAngle:a+s(r)+o});i.push(c),a=c.endAngle}else{var u=e.endAngle,d=e.startAngle,f=re(0,u-d)(r),p=X(X({},e),{},{startAngle:a+o,endAngle:a+f+o});i.push(p),a=p.endAngle}}),G.createElement(T,null,e.renderSectorsStatically(i))})}},{key:`attachKeyboardHandlers`,value:function(e){var t=this;e.onkeydown=function(e){if(!e.altKey)switch(e.key){case`ArrowLeft`:var n=++t.state.sectorToFocus%t.sectorRefs.length;t.sectorRefs[n].focus(),t.setState({sectorToFocus:n});break;case`ArrowRight`:var r=--t.state.sectorToFocus<0?t.sectorRefs.length-1:t.state.sectorToFocus%t.sectorRefs.length;t.sectorRefs[r].focus(),t.setState({sectorToFocus:r});break;case`Escape`:t.sectorRefs[t.state.sectorToFocus].blur(),t.setState({sectorToFocus:0});break;default:}}}},{key:`renderSectors`,value:function(){var e=this.props,t=e.sectors,n=e.isAnimationActive,r=this.state.prevSectors;return n&&t&&t.length&&(!r||!(0,Dt.default)(r,t))?this.renderSectorsWithAnimation():this.renderSectorsStatically(t)}},{key:`componentDidMount`,value:function(){this.pieRef&&this.attachKeyboardHandlers(this.pieRef)}},{key:`render`,value:function(){var e=this,t=this.props,n=t.hide,r=t.sectors,i=t.className,a=t.label,o=t.cx,s=t.cy,c=t.innerRadius,l=t.outerRadius,u=t.isAnimationActive,d=this.state.isAnimationFinished;if(n||!r||!r.length||!O(o)||!O(s)||!O(c)||!O(l))return null;var f=h(`recharts-pie`,i);return G.createElement(T,{tabIndex:this.props.rootTabIndex,className:f,ref:function(t){e.pieRef=t}},this.renderSectors(),a&&this.renderLabels(r),E.renderCallByParent(this.props,null,!1),(!u||d)&&_e.renderCallByParent(this.props,r,!1))}}],[{key:`getDerivedStateFromProps`,value:function(e,t){return t.prevIsAnimationActive===e.isAnimationActive?e.isAnimationActive&&e.animationId!==t.prevAnimationId?{prevAnimationId:e.animationId,curSectors:e.sectors,prevSectors:t.curSectors,isAnimationFinished:!0}:e.sectors===t.curSectors?null:{curSectors:e.sectors,isAnimationFinished:!0}:{prevIsAnimationActive:e.isAnimationActive,prevAnimationId:e.animationId,curSectors:e.sectors,prevSectors:[],isAnimationFinished:!0}}},{key:`getTextAnchor`,value:function(e,t){return e>t?`start`:e<t?`end`:`middle`}},{key:`renderLabelLineItem`,value:function(e,t,n){if(G.isValidElement(e))return G.cloneElement(e,t);if((0,q.default)(e))return e(t);var r=h(`recharts-pie-label-line`,typeof e==`boolean`?``:e.className);return G.createElement(ie,Y({},t,{key:n,type:`linear`,className:r}))}},{key:`renderLabelItem`,value:function(e,t,n){if(G.isValidElement(e))return G.cloneElement(e,t);var r=n;if((0,q.default)(e)&&(r=e(t),G.isValidElement(r)))return r;var i=h(`recharts-pie-label-text`,typeof e!=`boolean`&&!(0,q.default)(e)?e.className:``);return G.createElement(C,Y({},t,{alignmentBaseline:`middle`,className:i}),r)}}])}(G.PureComponent);Ot=Q,Z(Q,`displayName`,`Pie`),Z(Q,`defaultProps`,{stroke:`#fff`,fill:`#808080`,legendType:`rect`,cx:`50%`,cy:`50%`,startAngle:0,endAngle:360,innerRadius:0,outerRadius:`80%`,paddingAngle:0,labelLine:!0,hide:!1,minAngle:0,isAnimationActive:!D.isSsr,animationBegin:400,animationDuration:1500,animationEasing:`ease`,nameKey:`name`,blendStroke:!1,rootTabIndex:0}),Z(Q,`parseDeltaAngle`,function(e,t){return me(t-e)*Math.min(Math.abs(t-e),360)}),Z(Q,`getRealPieData`,function(e){var t=e.data,n=e.children,r=v(e,!1),i=se(n,S);return t&&t.length?t.map(function(e,t){return X(X(X({payload:e},r),e),i&&i[t]&&i[t].props)}):i&&i.length?i.map(function(e){return X(X({},r),e.props)}):[]}),Z(Q,`parseCoordinateOfPie`,function(e,t){var n=t.top,r=t.left,i=t.width,a=t.height,o=ge(i,a);return{cx:r+ue(e.cx,i,i/2),cy:n+ue(e.cy,a,a/2),innerRadius:ue(e.innerRadius,o,0),outerRadius:ue(e.outerRadius,o,o*.8),maxRadius:e.maxRadius||Math.sqrt(i*i+a*a)/2}}),Z(Q,`getComposedData`,function(e){var t=e.item,n=e.offset,r=t.type.defaultProps===void 0?t.props:X(X({},t.type.defaultProps),t.props),i=Ot.getRealPieData(r);if(!i||!i.length)return null;var a=r.cornerRadius,o=r.startAngle,s=r.endAngle,c=r.paddingAngle,l=r.dataKey,u=r.nameKey,d=r.valueKey,f=r.tooltipType,p=Math.abs(r.minAngle),m=Ot.parseCoordinateOfPie(r,n),h=Ot.parseDeltaAngle(o,s),g=Math.abs(h),_=l;(0,K.default)(l)&&(0,K.default)(d)?(ee(!1,`Use "dataKey" to specify the value of pie,
2
- the props "valueKey" will be deprecated in 1.1.0`),_=`value`):(0,K.default)(l)&&(ee(!1,`Use "dataKey" to specify the value of pie,
3
- the props "valueKey" will be deprecated in 1.1.0`),_=d);var v=i.filter(function(e){return w(e,_,0)!==0}).length,y=(g>=360?v:v-1)*c,x=g-v*p-y,S=i.reduce(function(e,t){var n=w(t,_,0);return e+(O(n)?n:0)},0),C;if(S>0){var T;C=i.map(function(e,t){var n=w(e,_,0),r=w(e,u,t),i=(O(n)?n:0)/S,s=t?T.endAngle+me(h)*c*(n===0?0:1):o,l=s+me(h)*((n===0?0:p)+i*x),d=(s+l)/2,g=(m.innerRadius+m.outerRadius)/2;return T=X(X(X({percent:i,cornerRadius:a,name:r,tooltipPayload:[{name:r,value:n,payload:e,dataKey:_,type:f}],midAngle:d,middleRadius:g,tooltipPosition:b(m.cx,m.cy,g,d)},e),m),{},{value:w(e,_),startAngle:s,endAngle:l,payload:e,paddingAngle:me(h)*c}),T})}return X(X({},m),{},{sectors:C,data:i})});var Ht=ne({chartName:`PieChart`,GraphicalChild:Q,validateTooltipEventTypes:[`item`],defaultTooltipEventType:`item`,legendContent:`children`,axisComponents:[{axisType:`angleAxis`,AxisComp:be},{axisType:`radiusAxis`,AxisComp:ye}],formatAxisMap:y,defaultProps:{layout:`centric`,startAngle:0,endAngle:360,cx:`50%`,cy:`50%`,innerRadius:0,outerRadius:`80%`}}),$=n(),Ut=e=>e===`total-members`||e===`free-members`||e===`paid-members`||e===`mrr`,Wt=({active:e,payload:t,range:n,color:r,showBreakdown:i})=>{if(!e||!t?.length)return null;let a=t[0].payload,{date:o,formattedValue:s,label:c,comped:l,gift:u}=a,d=a.value-(l||0)-(u||0);return(0,$.jsxs)(`div`,{className:`min-w-[200px] rounded-lg border bg-background px-3 py-2 shadow-lg`,children:[o&&(0,$.jsx)(`div`,{className:`mb-1 text-sm text-foreground`,children:z(o,n||0)}),(0,$.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[i&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,$.jsxs)(`div`,{className:`flex grow items-center justify-between gap-5`,children:[(0,$.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:`Paid subscriptions`}),(0,$.jsx)(`div`,{className:`font-mono text-xs`,children:p(d)})]})}),(0,$.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,$.jsxs)(`div`,{className:`flex grow items-center justify-between gap-5`,children:[(0,$.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:`Gift subscriptions`}),(0,$.jsx)(`div`,{className:`font-mono text-xs`,children:u!==void 0&&u>0?p(u):`0`})]})}),(0,$.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,$.jsxs)(`div`,{className:`flex grow items-center justify-between gap-5`,children:[(0,$.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:`Complimentary`}),(0,$.jsx)(`div`,{className:`font-mono text-xs`,children:l!==void 0&&l>0?p(l):`0`})]})}),(0,$.jsx)(Qe,{})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`span`,{className:`inline-block size-2 rounded-full opacity-50`,style:{backgroundColor:r||`var(--chart-purple)`}}),(0,$.jsxs)(`div`,{className:`flex grow items-center justify-between gap-5`,children:[c&&(0,$.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:c}),(0,$.jsx)(`div`,{className:`font-mono font-medium`,children:s})]})]})]})]})},Gt=({chartData:e,totals:t,initialTab:n,currencySymbol:r,isLoading:i,onTabChange:a})=>{let o=Ut(n)?n:`total-members`,[s,c]=(0,G.useState)(o),{range:l}=nt(),{appSettings:f}=tt(),m=d(),[h]=u();(0,G.useEffect)(()=>{c(o)},[o]);let g=e=>{c(e);let t=new URLSearchParams(h);t.set(`tab`,e),m(`?${t.toString()}`,{replace:!0}),a&&a(e)},{totalMembers:_,freeMembers:v,paidMembers:y,mrr:b,percentChanges:x,directions:S}=t,{chartData:C,chartRange:w}=(0,G.useMemo)(()=>{if(!e||e.length===0)return{chartData:[],chartRange:l};let t=[],n=`value`;switch(s){case`free-members`:n=`free`;break;case`paid-members`:n=`paid`;break;case`mrr`:n=`mrr`;break;default:n=`value`}t=k(e,l,n,`exact`);let i=[];switch(s){case`free-members`:i=t.map(e=>({...e,value:e.free,formattedValue:p(e.free),label:`Free members`}));break;case`paid-members`:i=t.map(e=>({...e,value:e.paid,formattedValue:p(e.paid),label:`Paid members`,comped:e.comped,gift:e.gift,paid_subscribed:e.paid_subscribed}));break;case`mrr`:i=t.map(e=>({...e,value:H(e.mrr),formattedValue:`${r}${p(H(e.mrr))}`,label:`MRR`}));break;default:i=t.map(e=>{let t=e.free+e.paid;return{...e,value:t,formattedValue:p(t),label:`Total members`}})}return{chartData:i,chartRange:Te(l,e,{fieldName:n})}},[s,e,l,r]),T={"total-members":{color:`var(--chart-darkblue)`},"free-members":{color:`var(--chart-blue)`},"paid-members":{color:`var(--chart-purple)`},mrr:{color:`var(--chart-teal)`}};return i?(0,$.jsx)(`div`,{className:`-mb-6 flex h-[calc(16vw+132px)] w-full items-start justify-center`,children:(0,$.jsx)(He,{})}):(0,$.jsxs)(Ae,{defaultValue:o,variant:`kpis`,children:[(0,$.jsxs)(ke,{className:`-mx-6 ${f?.paidMembersEnabled?`hidden grid-cols-4 lg:visible! lg:grid!`:`grid grid-cols-4`}`,children:[(0,$.jsx)(dt,{className:f?.paidMembersEnabled?``:`cursor-auto after:hidden`,value:`total-members`,onClick:()=>{f?.paidMembersEnabled&&g(`total-members`)},children:(0,$.jsx)(U,{color:`var(--chart-darkblue)`,diffDirection:l===V.allTime.value?`hidden`:S.total,diffValue:x.total,label:`Total members`,value:p(_)})}),f?.paidMembersEnabled&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(dt,{value:`free-members`,onClick:()=>{g(`free-members`)},children:(0,$.jsx)(U,{color:`var(--chart-blue)`,diffDirection:l===V.allTime.value?`hidden`:S.free,diffValue:x.free,label:`Free members`,value:p(v)})}),(0,$.jsx)(dt,{value:`paid-members`,onClick:()=>{g(`paid-members`)},children:(0,$.jsx)(U,{color:`var(--chart-purple)`,diffDirection:l===V.allTime.value?`hidden`:S.paid,diffValue:x.paid,label:`Paid members`,value:p(y)})}),(0,$.jsx)(dt,{value:`mrr`,onClick:()=>{g(`mrr`)},children:(0,$.jsx)(U,{color:`var(--chart-teal)`,diffDirection:l===V.allTime.value?`hidden`:S.mrr,diffValue:x.mrr,label:`MRR`,value:`${r}${p(H(b))}`})})]})]}),f?.paidMembersEnabled&&(0,$.jsxs)(Ke,{children:[(0,$.jsx)(ot,{className:`lg:hidden`,asChild:!0,children:(0,$.jsxs)(ft,{children:[s===`total-members`&&(0,$.jsx)(U,{color:`var(--chart-darkblue)`,diffDirection:l===V.allTime.value?`hidden`:S.total,diffValue:x.total,label:`Total members`,value:p(_)}),s===`free-members`&&(0,$.jsx)(U,{color:`var(--chart-blue)`,diffDirection:l===V.allTime.value?`hidden`:S.free,diffValue:x.free,label:`Free members`,value:p(v)}),s===`paid-members`&&(0,$.jsx)(U,{color:`var(--chart-purple)`,diffDirection:l===V.allTime.value?`hidden`:S.paid,diffValue:x.paid,label:`Paid members`,value:p(y)}),s===`mrr`&&(0,$.jsx)(U,{color:`var(--chart-teal)`,diffDirection:l===V.allTime.value?`hidden`:S.mrr,diffValue:x.mrr,label:`MRR`,value:`${r}${p(H(b))}`})]})}),(0,$.jsxs)(et,{align:`end`,className:`w-56`,children:[(0,$.jsx)(Ze,{onClick:()=>g(`total-members`),children:`Total members`}),(0,$.jsx)(Ze,{onClick:()=>g(`free-members`),children:`Free members`}),(0,$.jsx)(Ze,{onClick:()=>g(`paid-members`),children:`Paid members`}),(0,$.jsx)(Ze,{onClick:()=>g(`mrr`),children:`MRR`})]})]}),(0,$.jsx)(`div`,{className:`my-4 [&_.recharts-cartesian-axis-tick-value]:fill-gray-500`,children:(0,$.jsx)(xe,{className:`-mb-3 h-[16vw] max-h-[320px] w-full min-h-[180px]`,color:T[s].color,data:C,dataFormatter:s===`mrr`?e=>`${r}${p(e)}`:p,id:s,range:w,tooltipContent:s===`paid-members`?(0,$.jsx)(Wt,{color:T[`paid-members`].color,range:w,showBreakdown:!0}):void 0})})]})},Kt=(e,t=`signups desc`,n=50)=>{let{startDate:r,endDate:i,timezone:a}=$e(e),o={date_from:B(r),date_to:B(i),member_status:xt(lt),order:t,limit:n.toString()};return a&&(o.timezone=a),St({searchParams:o})},qt=({data:e,currencySymbol:t,limit:n,defaultSourceIconUrl:r})=>{let i=n?e.slice(0,n):e,{appSettings:a}=tt();return(0,$.jsx)(L,{children:i.map(e=>(0,$.jsxs)(I,{className:`last:border-none`,children:[(0,$.jsx)(R,{className:`font-medium`,children:(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(l,{defaultSourceIconUrl:r,displayName:e.displayName,iconSrc:e.iconSrc}),e.linkUrl?(0,$.jsx)(`a`,{className:`hover:underline`,href:e.linkUrl,rel:`noreferrer`,target:`_blank`,children:e.displayName}):(0,$.jsx)(`span`,{children:e.displayName})]})}),(0,$.jsxs)(R,{className:`text-right font-mono text-sm`,children:[`+`,p(e.free_members)]}),a?.paidMembersEnabled&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(R,{className:`text-right font-mono text-sm`,children:[`+`,p(e.paid_members)]}),(0,$.jsxs)(R,{className:`text-right font-mono text-sm`,children:[`+`,t,p(H(e.mrr))]})]})]},e.source))})},Jt=({range:e,limit:t=20,showViewAll:n=!1,sortBy:r,setSortBy:i})=>{let{site:a}=bt(),{data:l}=o(),{appSettings:u}=tt(),[d,f]=(0,G.useState)(`free_members desc`),p=r||d,m=i||f,{data:h,isLoading:g}=Kt(e,p.replace(`free_members`,`signups`).replace(`paid_members`,`paid_conversions`),t),_=a.url,v=`https://www.google.com/s2/favicons?domain=ghost.org&sz=64`,y=G.useMemo(()=>{if(l?.stats&&l?.meta?.totals){let e=l.meta.totals,t=e[0];if(!t)return s(`usd`);for(let n of e)n.mrr>t.mrr&&(t=n);return s(t.currency)}return s(`usd`)},[l]),b=G.useMemo(()=>h?.stats?h.stats.map(e=>{let t=e.source||`Direct`,{domain:n}=c(t,_),r=n?`https://www.faviconextractor.com/favicon/${n}?larger=true`:v,i=n&&t!==`Direct`?`https://${n}`:void 0;return{source:t,free_members:e.signups,paid_members:e.paid_conversions,mrr:e.mrr,iconSrc:r,displayName:t,linkUrl:i}}):[],[h,_]),x=`Where did your growth come from ${A(e)}`;return u?.analytics.membersTrackSources?g?(0,$.jsx)(L,{children:(0,$.jsx)(I,{className:`last:border-none`,children:(0,$.jsx)(R,{className:`border-none py-2`,colSpan:1,children:(0,$.jsx)(ut,{containerClassName:`space-y-2`,count:5,maxWidth:75,randomize:!0})})})}):(0,$.jsxs)($.Fragment,{children:[b.length>0?(0,$.jsx)(qt,{currencySymbol:y,data:b,defaultSourceIconUrl:v,limit:t}):(0,$.jsx)(L,{children:(0,$.jsx)(I,{className:`last:border-none`,children:(0,$.jsx)(R,{className:`border-none py-12 group-hover:bg-transparent!`,colSpan:u?.paidMembersEnabled?4:2,children:(0,$.jsx)(P,{description:`Try adjusting your date range to see more data.`,title:`No conversions ${A(e)}`,children:(0,$.jsx)(qe,{strokeWidth:1.5})})})})}),n&&b.length>t&&(0,$.jsx)(ze,{className:`border-none bg-transparent hover:bg-transparent!`,children:(0,$.jsx)(I,{children:(0,$.jsx)(R,{className:`border-none bg-transparent px-0 pb-0 hover:bg-transparent!`,colSpan:4,children:(0,$.jsxs)(st,{children:[(0,$.jsx)(We,{asChild:!0,children:(0,$.jsxs)(Ge,{variant:`outline`,children:[`View all `,(0,$.jsx)(rt,{})]})}),(0,$.jsxs)(Je,{className:`overflow-y-auto pt-0 sm:max-w-[420px]`,children:[(0,$.jsxs)(Xe,{className:`sticky top-0 z-40 -mx-6 bg-surface-elevated/60 p-6 backdrop-blur`,children:[(0,$.jsx)(Ue,{children:`Top sources`}),(0,$.jsx)(Ye,{children:x})]}),(0,$.jsx)(`div`,{className:`group/datalist`,children:(0,$.jsxs)(Ve,{children:[(0,$.jsx)(Be,{children:(0,$.jsxs)(I,{children:[(0,$.jsx)(F,{children:`Source`}),(0,$.jsx)(F,{className:`w-[110px] text-right`,children:(0,$.jsx)(j,{activeSortBy:p,setSortBy:m,sortBy:`free_members desc`,children:`Free members`})}),u?.paidMembersEnabled&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(F,{className:`w-[110px] text-right`,children:(0,$.jsx)(j,{activeSortBy:p,setSortBy:m,sortBy:`paid_members desc`,children:`Paid members`})}),(0,$.jsx)(F,{className:`w-[110px] text-right`,children:(0,$.jsx)(j,{activeSortBy:p,setSortBy:m,sortBy:`mrr desc`,children:`MRR impact`})})]})]})}),(0,$.jsx)(qt,{currencySymbol:y,data:b,defaultSourceIconUrl:v})]})})]})]})})})})]}):(0,$.jsx)(L,{children:(0,$.jsx)(I,{className:`last:border-none`,children:(0,$.jsx)(R,{className:`border-none py-12 group-hover:bg-transparent!`,colSpan:u?.paidMembersEnabled?4:2,children:(0,$.jsx)(vt,{})})})})};f();var Yt=({active:e,payload:t})=>{if(e&&t&&t.length){let e=t[0];return(0,$.jsx)(`div`,{className:`rounded-lg border bg-background p-2 shadow-sm`,children:(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`div`,{className:`size-2 rounded-full opacity-50`,style:{backgroundColor:e.payload.color}}),(0,$.jsx)(`span`,{className:`font-medium`,children:e.name}),(0,$.jsx)(`span`,{className:`font-mono`,children:p(e.value)})]})})}return null},Xt=({isLoading:e,range:t})=>{let{data:n}=a(),{data:{tiers:r=[]}={}}=pt(),[i,o]=(0,G.useState)(`billing-period`),{startDate:s,endDate:c}=(0,G.useMemo)(()=>$e(t),[t]),l=(0,G.useMemo)(()=>B(s),[s]),u=(0,G.useMemo)(()=>B(c),[c]),d=(0,G.useMemo)(()=>r.filter(e=>e.type===`paid`&&e.active).map(e=>({id:e.id,name:e.name})),[r]),f=(0,G.useMemo)(()=>{if(!n?.stats)return[];let e=g(l),t=g(u),r=n.stats.filter(n=>{let r=g(n.date);return r.isSameOrAfter(e)&&r.isSameOrBefore(t)}).reduce((e,t)=>{let n=t.cadence;return e[n]||(e[n]=0),e[n]+=t.signups,e},{});return Object.entries(r).map(([e,t],n)=>{let r=e,i=`url(#gradientPurple)`,a=`var(--chart-purple)`;return e===`month`?(r=`Monthly`,i=`url(#gradientPurple)`,a=`var(--chart-purple)`):e===`year`&&(r=`Annual`,i=`url(#gradientTeal)`,a=`var(--chart-teal)`),{id:`cadence-${n}`,name:r,count:t,fill:i,color:a}})},[n,l,u]),m=(0,G.useMemo)(()=>{if(!n?.stats||d.length===0)return[];let e=g(l),t=g(u),r=n.stats.filter(n=>{let r=g(n.date);return r.isSameOrAfter(e)&&r.isSameOrBefore(t)}).reduce((e,t)=>{let n=t.tier;return e[n]||(e[n]=0),e[n]+=t.signups,e},{}),i=[{gradient:`url(#gradientPurple)`,solid:`var(--chart-purple)`},{gradient:`url(#gradientTeal)`,solid:`var(--chart-teal)`},{gradient:`url(#gradientBlue)`,solid:`var(--chart-blue)`},{gradient:`url(#gradientRose)`,solid:`var(--chart-rose)`},{gradient:`url(#gradientOrange)`,solid:`var(--chart-orange)`},{gradient:`url(#gradientGreen)`,solid:`var(--chart-green)`},{gradient:`url(#gradientAmber)`,solid:`var(--chart-amber)`},{gradient:`url(#gradientYellow)`,solid:`var(--chart-yellow)`},{gradient:`url(#gradientDarkblue)`,solid:`var(--chart-darkblue)`},{gradient:`url(#gradientGray)`,solid:`var(--chart-darkgray)`}];return[...d.map(e=>{let t=r[e.id]||0;return{id:e.id,name:e.name,count:t}})].sort((e,t)=>t.count-e.count).map((e,t)=>{let n=t%i.length;return{...e,fill:i[n].gradient,color:i[n].solid}})},[n,d,l,u]),h=i===`billing-period`?f:m,_=(0,G.useMemo)(()=>h.reduce((e,t)=>e+t.count,0),[h]),v=(0,G.useMemo)(()=>{let e={count:{label:`Subscriptions`}};return h.forEach(t=>{e[t.id]={label:t.name,color:t.color}}),e},[h]),y=(0,G.useMemo)(()=>_===0?[]:h.map(e=>({label:e.name,count:e.count,percentage:e.count/_*100,color:e.color})),[h,_]);if(e||!n?.stats)return null;let b=h.length>0&&_>0;return(0,$.jsxs)(N,{children:[(0,$.jsx)(Ie,{children:(0,$.jsxs)(`div`,{className:`flex items-start justify-between gap-1.5`,children:[(0,$.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,$.jsx)(Le,{children:`Paid subscription breakdown`}),(0,$.jsxs)(Re,{children:[`New paid subscriptions `,A(t)]})]}),d.length>1&&(0,$.jsx)(`div`,{children:(0,$.jsxs)(Fe,{value:i,onValueChange:e=>o(e),children:[(0,$.jsx)(Ne,{className:`w-full`,children:(0,$.jsx)(Pe,{})}),(0,$.jsxs)(Me,{align:`end`,children:[(0,$.jsx)(je,{value:`billing-period`,children:`Billing period`}),(0,$.jsx)(je,{value:`tiers`,children:`Tiers`})]})]})})]})}),(0,$.jsx)(M,{children:b?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(de,{className:`mx-auto aspect-square h-[250px] min-h-[250px] w-full`,config:v,children:(0,$.jsxs)(Ht,{children:[(0,$.jsxs)(`defs`,{children:[(0,$.jsxs)(`linearGradient`,{id:`gradientPurple`,x1:`0`,x2:`0`,y1:`0`,y2:`1`,children:[(0,$.jsx)(`stop`,{offset:`0%`,stopColor:`var(--chart-purple)`,stopOpacity:.8}),(0,$.jsx)(`stop`,{offset:`100%`,stopColor:`var(--chart-purple)`,stopOpacity:.6})]}),(0,$.jsxs)(`linearGradient`,{id:`gradientTeal`,x1:`0`,x2:`0`,y1:`0`,y2:`1`,children:[(0,$.jsx)(`stop`,{offset:`0%`,stopColor:`var(--chart-teal)`,stopOpacity:.8}),(0,$.jsx)(`stop`,{offset:`100%`,stopColor:`var(--chart-teal)`,stopOpacity:.6})]}),(0,$.jsxs)(`linearGradient`,{id:`gradientRose`,x1:`0`,x2:`0`,y1:`0`,y2:`1`,children:[(0,$.jsx)(`stop`,{offset:`0%`,stopColor:`var(--chart-rose)`,stopOpacity:.8}),(0,$.jsx)(`stop`,{offset:`100%`,stopColor:`var(--chart-rose)`,stopOpacity:.6})]}),(0,$.jsxs)(`linearGradient`,{id:`gradientBlue`,x1:`0`,x2:`0`,y1:`0`,y2:`1`,children:[(0,$.jsx)(`stop`,{offset:`0%`,stopColor:`var(--chart-blue)`,stopOpacity:.8}),(0,$.jsx)(`stop`,{offset:`100%`,stopColor:`var(--chart-blue)`,stopOpacity:.6})]}),(0,$.jsxs)(`linearGradient`,{id:`gradientOrange`,x1:`0`,x2:`0`,y1:`0`,y2:`1`,children:[(0,$.jsx)(`stop`,{offset:`0%`,stopColor:`var(--chart-orange)`,stopOpacity:.8}),(0,$.jsx)(`stop`,{offset:`100%`,stopColor:`var(--chart-orange)`,stopOpacity:.6})]}),(0,$.jsxs)(`linearGradient`,{id:`gradientGreen`,x1:`0`,x2:`0`,y1:`0`,y2:`1`,children:[(0,$.jsx)(`stop`,{offset:`0%`,stopColor:`var(--chart-green)`,stopOpacity:.8}),(0,$.jsx)(`stop`,{offset:`100%`,stopColor:`var(--chart-green)`,stopOpacity:.6})]}),(0,$.jsxs)(`linearGradient`,{id:`gradientAmber`,x1:`0`,x2:`0`,y1:`0`,y2:`1`,children:[(0,$.jsx)(`stop`,{offset:`0%`,stopColor:`var(--chart-amber)`,stopOpacity:.8}),(0,$.jsx)(`stop`,{offset:`100%`,stopColor:`var(--chart-amber)`,stopOpacity:.6})]}),(0,$.jsxs)(`linearGradient`,{id:`gradientYellow`,x1:`0`,x2:`0`,y1:`0`,y2:`1`,children:[(0,$.jsx)(`stop`,{offset:`0%`,stopColor:`var(--chart-yellow)`,stopOpacity:.8}),(0,$.jsx)(`stop`,{offset:`100%`,stopColor:`var(--chart-yellow)`,stopOpacity:.6})]}),(0,$.jsxs)(`linearGradient`,{id:`gradientDarkblue`,x1:`0`,x2:`0`,y1:`0`,y2:`1`,children:[(0,$.jsx)(`stop`,{offset:`0%`,stopColor:`var(--chart-darkblue)`,stopOpacity:.8}),(0,$.jsx)(`stop`,{offset:`100%`,stopColor:`var(--chart-darkblue)`,stopOpacity:.6})]}),(0,$.jsxs)(`linearGradient`,{id:`gradientGray`,x1:`0`,x2:`0`,y1:`0`,y2:`1`,children:[(0,$.jsx)(`stop`,{offset:`0%`,stopColor:`var(--chart-darkgray)`,stopOpacity:.8}),(0,$.jsx)(`stop`,{offset:`100%`,stopColor:`var(--chart-darkgray)`,stopOpacity:.6})]})]}),(0,$.jsx)(pe,{content:(0,$.jsx)(Yt,{}),cursor:!1}),(0,$.jsx)(Q,{animationBegin:0,animationDuration:1e3,data:h,dataKey:`count`,innerRadius:70,nameKey:`name`,stroke:`var(--card)`,strokeWidth:5,children:(0,$.jsx)(E,{content:({viewBox:e})=>{if(e&&`cx`in e&&`cy`in e)return(0,$.jsxs)(`text`,{dominantBaseline:`middle`,textAnchor:`middle`,x:e.cx,y:e.cy,children:[(0,$.jsx)(`tspan`,{className:`fill-foreground text-2xl font-semibold tracking-tight`,x:e.cx,y:e.cy,children:p(_)}),(0,$.jsx)(`tspan`,{className:`fill-muted-foreground`,x:e.cx,y:(e.cy||0)+20,children:`Total`})]})}})})]})}),y.length>0&&(0,$.jsx)(`div`,{className:`mt-4 flex flex-wrap items-center justify-center gap-x-6 gap-y-1 text-sm text-muted-foreground`,children:y.map(e=>(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`span`,{className:`size-2 rounded-full opacity-50`,style:{backgroundColor:e.color}}),(0,$.jsx)(`span`,{className:`max-w-[150px] truncate whitespace-nowrap`,title:e.label,children:e.label}),(0,$.jsxs)(`span`,{className:`font-medium text-foreground`,children:[Math.round(Number(e.percentage)||0),`%`]})]},e.label))})]}):(0,$.jsx)(`div`,{className:`py-12`,children:(0,$.jsx)(P,{description:`No new paid subscriptions ${A(t)}.`,title:`No new subscribers`,children:(0,$.jsx)(it,{strokeWidth:1.5})})})})]})};f();var Zt=(e,t,n)=>{if(t===1){let t=g().format(`YYYY-MM-DD`),n=e.find(e=>e.date===t);return[{date:t,signups:n?.signups||0,cancellations:n?.cancellations||0}]}let{startDate:r,endDate:i}=$e(t),a=g(r).format(`YYYY-MM-DD`),o=new Map(e.map(e=>[e.date,e])),s=[],c=new Set;if(n===`monthly`){let e=g(r).startOf(`month`),t=g(i).startOf(`month`);for(;e.isSameOrBefore(t);){let t=e.format(`YYYY-MM-DD`),n=t<a?a:t;if(!c.has(n)){c.add(n);let e=o.get(n);e?s.push(e):s.push({date:n,signups:0,cancellations:0})}e.add(1,`month`)}}else if(n===`weekly`){let e=g(r).startOf(`week`),t=g(i).startOf(`week`);for(;e.isSameOrBefore(t);){let t=e.format(`YYYY-MM-DD`),n=t<a?a:t;if(!c.has(n)){c.add(n);let e=o.get(n);e?s.push(e):s.push({date:n,signups:0,cancellations:0})}e.add(1,`week`)}}else{let e=g(r),t=g(i);for(;e.isSameOrBefore(t);){let t=e.format(`YYYY-MM-DD`),n=o.get(t);n?s.push(n):s.push({date:t,signups:0,cancellations:0}),e.add(1,`day`)}}return s},Qt=e=>{let t=we(e);return t<30?[`daily`]:t>=91?[`weekly`,`monthly`]:[`daily`,`weekly`]},$t=e=>{let t=we(e);return t<30?`daily`:t>=91?`monthly`:`weekly`},en=({subscriptionData:e,memberData:t,range:n,isLoading:r})=>{let[i,a]=(0,G.useState)(()=>$t(n));(0,G.useEffect)(()=>{a($t(n))},[n]);let o=(0,G.useMemo)(()=>Qt(n),[n]),s=(0,G.useMemo)(()=>{switch(i){case`daily`:return`none`;case`weekly`:return`weekly`;case`monthly`:return`monthly`}},[i]),c=(0,G.useMemo)(()=>Te(n,[],{overrideStrategy:s}),[n,s]),l=(0,G.useMemo)(()=>{if(e&&e.length>0){if(n===1){let t=g().format(`YYYY-MM-DD`),r=e.find(e=>e.date===t);return[{date:z(t,n),rawDate:t,new:r?.signups||0,cancelled:-(r?.cancellations||0)}]}let t=k(e,n,`signups`,`sum`,s),r=k(e,n,`cancellations`,`sum`,s),i=new Map(r.map(e=>[e.date,e])),a=t.map(e=>({date:e.date,signups:e.signups||0,cancellations:i.get(e.date)?.cancellations||0})),o=new Set(a.map(e=>e.date));return r.forEach(e=>{o.has(e.date)||a.push({date:e.date,signups:0,cancellations:e.cancellations||0})}),a.sort((e,t)=>new Date(e.date).getTime()-new Date(t.date).getTime()),Zt(a,n,s).map(e=>({date:z(e.date,c),rawDate:e.date,new:e.signups||0,cancelled:-(e.cancellations||0)}))}else{if(!t||t.length===0)return[];if(n===1){let e=g().format(`YYYY-MM-DD`),r=t.find(t=>t.date===e);return[{date:z(e,n),rawDate:e,new:r?.paid_subscribed||0,cancelled:-(r?.paid_canceled||0)}]}let e=k(t,n,`paid_subscribed`,`sum`,s),r=k(t,n,`paid_canceled`,`sum`,s),i=new Map(r.map(e=>[e.date,e])),a=e.map(e=>({date:e.date,paid_subscribed:e.paid_subscribed||0,paid_canceled:i.get(e.date)?.paid_canceled||0})),o=new Set(a.map(e=>e.date));return r.forEach(e=>{o.has(e.date)||a.push({date:e.date,paid_subscribed:0,paid_canceled:e.paid_canceled||0})}),a.sort((e,t)=>new Date(e.date).getTime()-new Date(t.date).getTime()),a.map(e=>({date:z(e.date,c),rawDate:e.date,new:e.paid_subscribed||0,cancelled:-(e.paid_canceled||0)}))}},[t,e,n,s,c]),u={new:{label:`New`,color:`var(--chart-teal)`},cancelled:{label:`Cancelled`,color:`var(--chart-rose)`}},d=(0,G.useMemo)(()=>({new:l.reduce((e,t)=>e+t.new,0),cancelled:l.reduce((e,t)=>e+Math.abs(t.cancelled),0)}),[l]);if(r)return null;let f=l.length>0&&(d.new>0||d.cancelled>0),m=e=>e.charAt(0).toUpperCase()+e.slice(1);return(0,$.jsxs)(N,{"data-testid":`paid-members-change-card`,children:[(0,$.jsx)(Ie,{children:(0,$.jsxs)(`div`,{className:`flex items-start justify-between gap-1.5`,children:[(0,$.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,$.jsx)(Le,{children:`Paid subscriptions`}),(0,$.jsxs)(Re,{children:[`New and cancelled paid subscriptions `,A(n)]})]}),o.length>1&&(0,$.jsx)(`div`,{children:(0,$.jsxs)(Fe,{value:i,onValueChange:e=>a(e),children:[(0,$.jsx)(Ne,{className:`w-[110px]`,children:(0,$.jsx)(Pe,{})}),(0,$.jsx)(Me,{align:`end`,children:o.map(e=>(0,$.jsx)(je,{value:e,children:m(e)},e))})]})})]})}),(0,$.jsx)(M,{children:f?(0,$.jsxs)(`div`,{children:[(0,$.jsx)(de,{className:`aspect-auto h-[200px] w-full md:h-[220px] xl:h-[260px]`,config:u,children:(0,$.jsxs)(De,{data:l,stackOffset:`sign`,children:[(0,$.jsx)(`defs`,{children:(0,$.jsxs)(`linearGradient`,{id:`tealGradient`,x1:`0`,x2:`0`,y1:`0`,y2:`1`,children:[(0,$.jsx)(`stop`,{offset:`0%`,stopColor:`var(--color-new)`,stopOpacity:.8}),(0,$.jsx)(`stop`,{offset:`100%`,stopColor:`var(--color-new)`,stopOpacity:.6})]})}),(0,$.jsx)(`defs`,{children:(0,$.jsxs)(`linearGradient`,{id:`roseGradient`,x1:`0`,x2:`0`,y1:`0`,y2:`1`,children:[(0,$.jsx)(`stop`,{offset:`0%`,stopColor:`var(--color-cancelled)`,stopOpacity:.6}),(0,$.jsx)(`stop`,{offset:`100%`,stopColor:`var(--color-cancelled)`,stopOpacity:.8})]})}),(0,$.jsx)(Ee,{stroke:`var(--border)`,vertical:!1}),(0,$.jsx)(Ce,{axisLine:!1,dataKey:`date`,tickFormatter:()=>``,tickLine:!1,tickMargin:10}),(0,$.jsx)(Se,{axisLine:!1,tickFormatter:e=>p(e<0?e*-1:e),tickLine:!1}),(0,$.jsx)(pe,{content:(0,$.jsx)(le,{className:`min-w-[120px]! px-3 py-2`,formatter:(e,t,n,r)=>{let i=Number(e),a=`0`;a=i===0?`0`:p(i<0?i*-1:i);let o=n?.payload,s=Number(o?.new||0)+Number(o?.cancelled||0),l=s===0?`0`:s>0?`+${p(s)}`:p(s),d=o?.date,f=o?.rawDate;return f&&(d=z(f,c)),(0,$.jsxs)(`div`,{className:`flex w-full flex-col`,children:[r===0&&(0,$.jsx)(`div`,{className:`mb-1 text-sm font-medium text-foreground`,children:d}),(0,$.jsxs)(`div`,{className:`flex w-full items-center justify-between gap-4`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,$.jsx)(`div`,{className:`size-2 shrink-0 rounded-full bg-[var(--color-bg)] opacity-50`,style:{"--color-bg":`var(--color-${t})`}}),(0,$.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:u[t]?.label||t})]}),(0,$.jsx)(`div`,{className:`ml-auto flex items-baseline gap-0.5 font-mono font-medium text-foreground tabular-nums`,children:a})]}),r===1&&(0,$.jsxs)(`div`,{className:`mt-1 flex w-full items-center justify-between gap-4 border-t pt-1`,children:[(0,$.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:`Net change`}),(0,$.jsx)(`div`,{className:`ml-auto flex items-baseline gap-0.5 font-mono font-medium text-foreground tabular-nums`,children:l})]})]})},hideLabel:!0}),cursor:!1,isAnimationActive:!1,position:{y:10}}),(0,$.jsx)(ce,{activeBar:{fillOpacity:1},dataKey:`new`,fill:`url(#tealGradient)`,fillOpacity:.75,maxBarSize:32,minPointSize:3,radius:[4,4,0,0],stackId:`a`}),(0,$.jsx)(ce,{activeBar:{fillOpacity:1},dataKey:`cancelled`,fill:`url(#roseGradient)`,fillOpacity:.75,maxBarSize:32,radius:[4,4,0,0],stackId:`a`})]})}),(0,$.jsxs)(`div`,{className:`mt-3 flex items-center justify-center gap-6 text-sm text-muted-foreground`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`span`,{className:`size-2 rounded-full opacity-50`,style:{backgroundColor:u.new.color}}),(0,$.jsx)(`span`,{children:`New`}),(0,$.jsx)(`span`,{className:`font-medium text-foreground`,children:p(d.new)})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`span`,{className:`size-2 rounded-full opacity-50`,style:{backgroundColor:u.cancelled.color}}),(0,$.jsx)(`span`,{children:`Cancelled`}),(0,$.jsx)(`span`,{className:`font-medium text-foreground`,children:p(d.cancelled)})]})]})]}):(0,$.jsx)(`div`,{className:`py-12`,children:(0,$.jsx)(P,{description:`No paid subscription changes ${A(n)}.`,title:`No paid member changes`,children:(0,$.jsx)(ct,{strokeWidth:1.5})})})})]})},tn=(e,t,n)=>{let i=e??30,a=t??`mrr desc`,{startDate:o,endDate:s}=(0,G.useMemo)(()=>$e(i),[i]),c=(0,G.useMemo)(()=>{let e={date_from:B(o),date_to:B(s),order:a};return n===`posts`?e.post_type=`post`:n===`pages`&&(e.post_type=`page`),e},[o,s,a,n]);return r({searchParams:Object.fromEntries(Object.entries(c).filter(([,e])=>e!==void 0))})},nn=()=>{let{range:e}=nt(),{site:t,settings:n}=bt(),r=String(n.find(e=>e.key===`timezone`)?.value||`Etc/UTC`),a=d(),[o,s]=(0,G.useState)(`free_members desc`),[c,l]=(0,G.useState)(W.POSTS_AND_PAGES),[f]=u(),{appSettings:h}=tt(),g=f.get(`tab`)||`total-members`,[_,v]=(0,G.useState)(g);(0,G.useEffect)(()=>{g!==_&&v(g)},[g]);let{isLoading:y,chartData:b,totals:x,currencySymbol:S,subscriptionData:C}=yt(e),{data:w,isLoading:T}=tn(e,o,c),E=(0,G.useMemo)(()=>{let e=(w?.stats||[]).reduce((e,t)=>{let n=t.post_id||(t.title&&t.title.trim()!==``?t.title:t.attribution_url);if(!n)return e;if(!e.has(n))e.set(n,t);else{let r=e.get(n);r.free_members+=t.free_members,r.paid_members+=t.paid_members,r.mrr+=t.mrr,e.set(n,r)}return e},new Map),t=Array.from(e.values()),n=t.reduce((e,t)=>e+t.free_members,0),r=t.reduce((e,t)=>e+t.paid_members,0),i=t.reduce((e,t)=>e+t.mrr,0);return t.map(e=>{let t=0;return o.includes(`free_members`)&&n>0?t=e.free_members/n:o.includes(`paid_members`)&&r>0?t=e.paid_members/r:o.includes(`mrr`)&&i>0&&(t=e.mrr/i),{title:e.title||e.attribution_url,post_id:e.post_id,attribution_url:e.attribution_url,attribution_type:e.attribution_type,attribution_id:e.attribution_id,free_members:e.free_members,paid_members:e.paid_members,mrr:e.mrr,percentage:t,published_at:e.published_at,url_exists:e.url_exists??!0}})},[w,o]),D=y,ee=y||T;return(0,$.jsxs)(ht,{children:[(0,$.jsx)(gt,{children:(0,$.jsx)(i,{children:(0,$.jsx)(mt,{})})}),(0,$.jsxs)(_t,{data:D?void 0:b,isLoading:!1,loadingComponent:(0,$.jsx)($.Fragment,{}),children:[(0,$.jsx)(N,{"data-testid":`total-members-card`,children:(0,$.jsx)(M,{children:(0,$.jsx)(Gt,{chartData:b,currencySymbol:S,initialTab:g,isLoading:D,totals:x,onTabChange:v})})}),h?.paidMembersEnabled&&_===`paid-members`&&(0,$.jsxs)(`div`,{className:`grid grid-cols-1 gap-6 lg:grid-cols-2 xl:grid-cols-[2fr_minmax(460px,1fr)]`,children:[(0,$.jsx)(en,{isLoading:D,memberData:b,range:e,subscriptionData:C}),(0,$.jsx)(Xt,{isLoading:D,range:e})]}),(0,$.jsxs)(N,{className:`w-full overflow-x-auto`,"data-testid":`top-content-card`,children:[(0,$.jsxs)(Ie,{children:[(0,$.jsx)(Le,{children:wt(c)}),(0,$.jsx)(Re,{children:Ct(c,e,A)})]}),(0,$.jsx)(M,{children:(0,$.jsxs)(Ve,{children:[(0,$.jsx)(Be,{children:(0,$.jsxs)(I,{className:`[&>th]:h-auto [&>th]:pt-0 [&>th]:pb-2`,children:[(0,$.jsx)(F,{className:`min-w-[320px] pl-0`,children:(0,$.jsx)(Ae,{defaultValue:c,variant:`button-sm`,onValueChange:e=>{l(e)},children:(0,$.jsxs)(ke,{children:[(0,$.jsx)(Oe,{value:W.POSTS_AND_PAGES,children:`Posts & pages`}),(0,$.jsx)(Oe,{value:W.POSTS,children:`Posts`}),(0,$.jsx)(Oe,{value:W.PAGES,children:`Pages`}),(0,$.jsx)(Oe,{value:W.SOURCES,children:`Sources`})]})})}),(0,$.jsx)(F,{className:`w-[140px] text-right`,children:h?.paidMembersEnabled?(0,$.jsx)(j,{activeSortBy:o,setSortBy:s,sortBy:`free_members desc`,children:`Free members`}):(0,$.jsx)($.Fragment,{children:`Free members`})}),h?.paidMembersEnabled&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(F,{className:`w-[140px] text-right`,children:(0,$.jsx)(j,{activeSortBy:o,setSortBy:s,sortBy:`paid_members desc`,children:`Paid members`})}),(0,$.jsx)(F,{className:`w-[140px] text-right`,children:(0,$.jsx)(j,{activeSortBy:o,setSortBy:s,sortBy:`mrr desc`,children:`MRR impact`})})]})]})}),c===W.SOURCES?(0,$.jsx)(Jt,{limit:20,range:e,setSortBy:e=>s(e),showViewAll:!0,sortBy:o}):(0,$.jsx)(L,{children:ee?(0,$.jsx)(I,{className:`last:border-none`,children:(0,$.jsx)(R,{className:`border-none py-2`,colSpan:1,children:(0,$.jsx)(ut,{containerClassName:`space-y-2`,count:5,maxWidth:75,randomize:!0})})}):h?.analytics.membersTrackSources?E.length>0?E.map((e,n)=>(0,$.jsxs)(I,{className:`last:border-none`,children:[(0,$.jsx)(R,{children:(0,$.jsxs)(`div`,{className:`group/link inline-flex flex-col items-start gap-px`,children:[e.post_id&&e.attribution_type===`post`?(0,$.jsx)(Ge,{className:`h-auto p-0 text-left leading-tight font-medium whitespace-normal hover:underline!`,title:`View post analytics`,variant:`link`,onClick:Tt(e.attribution_url,e.post_id,t.url||``,a,e.attribution_type),children:e.title}):(0,$.jsx)(`span`,{className:`font-medium`,children:e.title}),e.published_at&&m&&new Date(e.published_at).getTime()>0&&(0,$.jsxs)(`span`,{className:`text-muted-foreground`,children:[`Published on `,m(e.published_at,r)]})]})}),(0,$.jsxs)(R,{className:`text-right font-mono text-sm`,children:[e.free_members>0&&`+`,p(e.free_members)]}),h?.paidMembersEnabled&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(R,{className:`text-right font-mono text-sm`,children:[e.paid_members>0&&`+`,p(e.paid_members)]}),(0,$.jsxs)(R,{className:`text-right font-mono text-sm`,children:[e.mrr>0&&`+`,S,p(H(e.mrr))]})]})]},`${c}-${e.post_id||`${e.title}-${n}`}`)):(0,$.jsx)(I,{className:`border-none`,children:(0,$.jsx)(R,{className:`py-12 group-hover:bg-transparent!`,colSpan:h?.paidMembersEnabled?4:2,children:(0,$.jsx)(P,{description:`Try adjusting your date range to see more data.`,title:`No conversions ${A(e)}`,children:(0,$.jsx)(at,{strokeWidth:1.5})})})}):(0,$.jsx)(I,{className:`last:border-none`,children:(0,$.jsx)(R,{className:`border-none py-12 group-hover:bg-transparent!`,colSpan:h?.paidMembersEnabled?4:2,children:(0,$.jsx)(vt,{})})})})]})})]})]})]})};export{nn as default};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{c as r,g as i,i as a,r as o}from"./stats-DGoXZxWE.js";import{g as s}from"./chunk-KS7C4IRE-DG9HTHQ3.js";import{a as c,t as l}from"./router-provider-C1R4AZ2o.js";import{f as u,l as d,p as f}from"./dist-DGzPJ_bO.js";import{g as p,n as m,o as h,r as g}from"./chart-BuRT2Y6p.js";import{a as _,c as v,i as y,l as b,n as x,t as ee,u as te}from"./chart-helpers-DbklaJw9.js";import{n as ne,t as S}from"./sort-button-DZp9Y2r1.js";import{r as re,t as ie}from"./tabs-D3ZOYkM7.js";import{a as C,i as w,n as T,o as E,r as D,s as O,t as k}from"./select--2uVN9_-.js";import{a as A,n as j,o as M,r as N,t as P}from"./card-DGoDJzrn.js";import{t as ae}from"./empty-indicator-oX1u1Pkn.js";import{a as F,c as I,n as L,r as R,s as z,t as B}from"./table-B8LgTQJZ.js";import{$n as V,Hr as H,Ir as U,Jr as oe,Qr as W,Rr as se,Wr as G,Xr as ce,Zs as K,ao as q,d as J,ii as le,io as ue,nr as de}from"./index-BBf502Wg.js";import{n as Y,r as X,t as fe}from"./kpi-tabs-BSvh9eoq.js";import{r as pe}from"./newsletters-D1jbtV-h.js";import{i as me,n as he,r as ge,t as _e}from"./stats-view-D2-1L0ms.js";import{t as ve}from"./use-analytics-data-CaT8RirX.js";var Z=e(t(),1),Q=n(),ye=({active:e,payload:t})=>{if(!e||!t?.length)return null;let n=t[0].payload,r=typeof n.send_date==`string`?n.send_date:n.send_date.toISOString().split(`T`)[0];return(0,Q.jsxs)(`div`,{className:`max-w-[240px] min-w-[220px] rounded-lg border bg-background px-3 py-2 shadow-lg`,children:[(0,Q.jsxs)(`div`,{className:`mb-2 flex w-full flex-col border-b pb-2`,children:[(0,Q.jsx)(`span`,{className:`text-sm leading-tight font-semibold`,children:n.post_title}),(0,Q.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[`Sent on `,d(r)]})]}),(0,Q.jsxs)(`div`,{className:`mb-1 flex w-full justify-between`,children:[(0,Q.jsx)(`span`,{className:`font-medium text-muted-foreground`,children:`Sent`}),(0,Q.jsx)(`div`,{className:`ml-2 w-full text-right font-mono`,children:u(n.sent_to)})]}),(0,Q.jsxs)(`div`,{className:`mb-1 flex w-full justify-between`,children:[(0,Q.jsx)(`span`,{className:`font-medium text-muted-foreground`,children:`Opens`}),(0,Q.jsxs)(`div`,{className:`ml-2 w-full text-right font-mono`,children:[(0,Q.jsxs)(`span`,{className:`text-muted-foreground`,children:[u(n.total_opens),` / `]}),f(n.open_rate)]})]}),(0,Q.jsxs)(`div`,{className:`mb-1 flex w-full justify-between`,children:[(0,Q.jsx)(`span`,{className:`font-medium text-muted-foreground`,children:`Clicks`}),(0,Q.jsxs)(`div`,{className:`ml-2 w-full text-right font-mono`,children:[(0,Q.jsxs)(`span`,{className:`text-muted-foreground`,children:[u(n.total_clicks),` / `]}),f(n.click_rate)]})]})]})},be=({subscribersData:e,avgsData:t,totals:n,isLoading:r,isAvgsLoading:i,initialTab:a=`total-subscribers`})=>{let[o,l]=(0,Z.useState)(a),[d,S]=(0,Z.useState)(!1),{range:C}=J(),w=c(),[T]=s(),{appSettings:E}=K(),{emailTrackClicks:D,emailTrackOpens:O}=E?.analytics||{},{totalSubscribers:k,avgOpenRate:A,avgClickRate:j}=n,M=(0,Z.useMemo)(()=>{if(!e||e.length===0)return[];let t=[];return t=y(e,C,`value`,`exact`),t.map(e=>({...e,formattedValue:u(e.value),label:`Total Subscribers`}))},[e,C]),N=(0,Z.useMemo)(()=>ee(C,e||[]),[e,C]),P=(0,Z.useMemo)(()=>{if(!M||M.length<=1)return{direction:`same`,value:`0%`};let e=M[0]?.value??0,t=M[M.length-1]?.value??0,n=`same`;t>e?n=`up`:t<e&&(n=`down`);let r;if(e===0)r=t===0?`0%`:`+100%`;else{let n=(t-e)/e*100,i=Math.round(n*10)/10;r=`${n>=0?`+`:``}${i}%`}return{direction:n,value:r}},[M]);(0,Z.useEffect)(()=>{l(a)},[a]);let F=e=>{l(e);let t=new URLSearchParams(T);t.set(`tab`,e),w(`?${t.toString()}`,{replace:!0})},I={open_rate:{label:`Open rate`}},L=(0,Z.useMemo)(()=>({"total-subscribers":{color:`var(--chart-darkblue)`,datakey:`value`},"avg-open-rate":{color:`var(--chart-blue)`,datakey:`open_rate`},"avg-click-rate":{color:`var(--chart-teal)`,datakey:`click_rate`}}),[]),{barDomain:R,barTicks:z}=(0,Z.useMemo)(()=>{if(!t||t.length===0||o===`total-subscribers`)return{barDomain:[0,1],barTicks:[0,1]};let e=L[o]?.datakey;if(!e)return{barDomain:[0,1],barTicks:[0,1]};let n=t.map(t=>t[e]).filter(e=>typeof e==`number`);if(n.length===0)return{barDomain:[0,1],barTicks:[0,1]};let r=o===`avg-open-rate`?A:j,i=Math.max(Math.max(...n),r),a;return a=i<.01?.01:i<.1?(Math.floor(i*100)+1)/100:(Math.floor(i*10)+1)/10,{barDomain:[0,a],barTicks:[0,a]}},[t,o,L,A,j]);if(r)return(0,Q.jsx)(`div`,{className:`-mb-6 flex h-[calc(16vw+132px)] w-full items-start justify-center`,children:(0,Q.jsx)(V,{})});let B=`grid-cols-3`;(!D||!O)&&(B=`grid-cols-2`),!D&&!O&&(B=`grid-cols-1`);let H=o===`avg-open-rate`&&A>R[0]&&A<R[1]||o===`avg-click-rate`&&j>R[0]&&j<R[1],U=o===`avg-open-rate`?A:j;return(0,Q.jsxs)(ie,{defaultValue:a,variant:`kpis`,children:[(0,Q.jsxs)(re,{className:`-mx-6 hidden grid-cols-3 md:visible! md:grid! ${B}`,children:[(0,Q.jsx)(Y,{className:`${!O&&!D&&`cursor-auto after:hidden`}`,value:`total-subscribers`,onClick:()=>{F(`total-subscribers`)},children:(0,Q.jsx)(X,{color:L[`total-subscribers`].color,"data-testid":`total-subscribers-value`,diffDirection:P.direction,diffValue:P.value,label:`Total subscribers`,value:u(k)})}),O&&(0,Q.jsx)(Y,{value:`avg-open-rate`,onClick:()=>{F(`avg-open-rate`)},children:(0,Q.jsx)(X,{className:i?`opacity-50`:``,color:L[`avg-open-rate`].color,label:`Avg. open rate`,value:f(A)})}),D&&(0,Q.jsx)(Y,{value:`avg-click-rate`,onClick:()=>{F(`avg-click-rate`)},children:(0,Q.jsx)(X,{className:i?`opacity-50`:``,color:L[`avg-click-rate`].color,label:`Avg. click rate`,value:f(j)})})]}),(0,Q.jsxs)(oe,{children:[(0,Q.jsx)(le,{className:`md:hidden`,asChild:!0,children:(0,Q.jsxs)(fe,{children:[o===`total-subscribers`&&(0,Q.jsx)(X,{color:L[`total-subscribers`].color,label:`Total subscribers`,value:u(k)}),o===`avg-open-rate`&&O&&(0,Q.jsx)(X,{className:i?`opacity-50`:``,color:L[`avg-open-rate`].color,label:`Avg. open rate`,value:f(A)}),o===`avg-click-rate`&&D&&(0,Q.jsx)(X,{className:i?`opacity-50`:``,color:L[`avg-click-rate`].color,label:`Avg. click rate`,value:f(j)})]})}),(0,Q.jsxs)(ce,{align:`end`,className:`w-56`,children:[(0,Q.jsx)(W,{onClick:()=>F(`total-subscribers`),children:`Total subscribers`}),O&&(0,Q.jsx)(W,{onClick:()=>F(`avg-open-rate`),children:`Avg. open rate`}),D&&(0,Q.jsx)(W,{onClick:()=>F(`avg-click-rate`),children:`Avg. click rate`})]})]}),(0,Q.jsxs)(`div`,{className:`my-4 [&_.recharts-cartesian-axis-tick-value]:fill-gray-500`,children:[o===`total-subscribers`&&(0,Q.jsx)(_,{className:`-mb-3 h-[16vw] max-h-[320px] min-h-[180px] w-full`,color:L[`total-subscribers`].color,data:M,id:`mrr`,range:N}),(o===`avg-open-rate`&&O||o===`avg-click-rate`&&D)&&(0,Q.jsx)(Q.Fragment,{children:i?(0,Q.jsx)(`div`,{className:`h-[320px] w-full items-center justify-center`,children:(0,Q.jsx)(V,{})}):t&&t.length>0?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(m,{className:`aspect-auto h-[200px] w-full md:h-[220px] xl:h-[320px]`,config:I,children:(0,Q.jsxs)(ne,{className:d?`cursor-pointer!`:``,data:t,margin:{top:20},onClick:e=>{let t=(e.activePayload?.[0])?.payload?.post_id;t&&w(`/posts/analytics/${t}`,{crossApp:!0})},onMouseLeave:()=>S(!1),onMouseMove:e=>{let t=(e.activePayload?.[0])?.payload?.post_id;S(!!t)},children:[(0,Q.jsx)(`defs`,{children:(0,Q.jsxs)(`linearGradient`,{id:`barGradient`,x1:`0`,x2:`0`,y1:`0`,y2:`1`,children:[(0,Q.jsx)(`stop`,{offset:`0%`,stopColor:L[o].color,stopOpacity:.8}),(0,Q.jsx)(`stop`,{offset:`100%`,stopColor:L[o].color,stopOpacity:.6})]})}),(0,Q.jsx)(te,{horizontal:!0,stroke:`var(--border)`,vertical:!1}),(0,Q.jsx)(b,{axisLine:{stroke:`var(--border)`,strokeWidth:1},dataKey:`post_id`,interval:0,stroke:`var(--border)`,tickFormatter:()=>``,tickLine:!1,tickMargin:10}),(0,Q.jsx)(v,{axisLine:!1,domain:R,tickFormatter:e=>f(e),tickLine:!1,ticks:z,width:se(z,e=>f(e))}),(0,Q.jsx)(g,{content:(0,Q.jsx)(ye,{}),cursor:!1,isAnimationActive:!1,position:{y:10}}),H&&(0,Q.jsx)(h,{label:{value:`${f(U)}`,position:`left`,offset:8,fill:`var(--muted-foreground)`},opacity:.5,stroke:`var(--muted-foreground)`,strokeDasharray:`4 4`,y:U}),(0,Q.jsx)(p,{activeBar:{fillOpacity:1},dataKey:L[o].datakey,fill:`url(#barGradient)`,fillOpacity:.6,isAnimationActive:!1,maxBarSize:32,minPointSize:3,radius:4})]})}),(0,Q.jsxs)(`div`,{className:`-mt-4 text-center text-sm text-muted-foreground`,children:[`Newsletters `,o===`avg-open-rate`?`opens`:`clicks`,` in this period`]})]}):(0,Q.jsx)(ae,{className:`size-full py-20`,title:`No newsletters ${x(C)}`,children:(0,Q.jsx)(q,{strokeWidth:1.5})})})]})]})},xe=({newsletters:e})=>{let{selectedNewsletterId:t,setSelectedNewsletterId:n}=J(),r=(0,Z.useMemo)(()=>e?.filter(e=>e.status===`active`)||[],[e]);return(0,Z.useEffect)(()=>{if(r.length>0&&!t){let e=r.find(e=>e.sort_order===0);n(e?e.id:r[0].id)}},[r,t,n]),r.length<=1?null:(0,Q.jsxs)(k,{value:t||``,onValueChange:e=>{n(e)},children:[(0,Q.jsxs)(E,{className:`w-auto`,children:[(0,Q.jsx)(ue,{className:`mr-2`,size:16,strokeWidth:1.5}),(0,Q.jsx)(O,{placeholder:`Select a newsletter`})]}),(0,Q.jsx)(T,{align:`end`,children:(0,Q.jsxs)(D,{children:[(0,Q.jsx)(C,{children:`Newsletters`}),r.map(e=>(0,Q.jsx)(w,{value:e.id,children:e.name},e.id))]})})]})},Se=(e,t,n=!0)=>{let i=e??30,{startDate:a,endDate:o}=(0,Z.useMemo)(()=>G(i),[i]),s=r({searchParams:(0,Z.useMemo)(()=>{let e={date_from:H(a),date_to:H(o)};return t&&(e.newsletter_id=t),e},[a,o,t]),enabled:n});return n?s:{data:void 0,isLoading:!1,error:null,isError:!1,refetch:s.refetch}},Ce=(e,t,n,r=!0)=>{let i=e??30,a=t??`date desc`,{startDate:s,endDate:c}=(0,Z.useMemo)(()=>G(i),[i]),l=o({searchParams:(0,Z.useMemo)(()=>{let e={date_from:H(s),date_to:H(c),order:a};return n&&(e.newsletter_id=n),e},[s,c,a,n]),enabled:r});return r?l:{data:void 0,isLoading:!1,error:null,isError:!1,refetch:l.refetch}},we=(e,t=[],n=!0)=>{let r=a({searchParams:(0,Z.useMemo)(()=>{let n={};return e&&(n.newsletter_id=e),t.length>0&&(n.post_ids=t.join(`,`)),n},[e,t]),enabled:n});return n?r:{data:void 0,isLoading:!1,error:null,isError:!1,refetch:r.refetch}},Te=(e,t,n,r=!0)=>{let i=Ce(e,t,n,r),a=(0,Z.useMemo)(()=>i.data?.stats?i.data.stats.map(e=>e.post_id):[],[i.data]),o=we(n,a,r&&a.length>0);return{data:(0,Z.useMemo)(()=>{if(!i.data?.stats)return;let e=i.data.stats,t=o.data?.stats||[],n=new Map;t.forEach(e=>{n.set(e.post_id,e)});let r=e.map(e=>{let t=n.get(e.post_id);return{...e,total_clicks:t?.total_clicks||0,click_rate:t?.click_rate||0}});return{...i.data,stats:r}},[i.data,o.data]),isLoading:i.isLoading,isClicksLoading:o.isLoading,error:i.error||o.error,isError:i.isError||o.isError,refetch:()=>{i.refetch(),o.refetch()}}},Ee=Z.memo(({range:e,selectedNewsletterId:t,shouldFetchStats:n,sortBy:r})=>{let i=c(),{settings:a}=ve(),o=String(a.find(e=>e.key===`timezone`)?.value||`Etc/UTC`),{data:s,isLoading:l,isClicksLoading:p}=Te(e,r,t||void 0,!!n),{appSettings:m}=K(),{emailTrackClicks:h,emailTrackOpens:g}=m?.analytics||{},_=(0,Z.useMemo)(()=>s?.stats||[],[s]),v=g&&h?5:g||h?4:3,y=(0,Z.useMemo)(()=>(0,Q.jsx)(Q.Fragment,{children:(0,Q.jsx)(I,{className:`last:border-none [&>td]:py-2.5`,children:(0,Q.jsx)(R,{className:`font-medium`,colSpan:v,children:(0,Q.jsx)(de,{className:`mt-5`})})})}),[v]),b=(0,Z.useMemo)(()=>_.length>0?(0,Q.jsx)(Q.Fragment,{children:_.map(e=>(0,Q.jsxs)(I,{className:`last:border-none [&>td]:py-2.5`,children:[(0,Q.jsx)(R,{className:`font-medium`,children:(0,Q.jsx)(`div`,{className:`group/link inline-flex items-center gap-2`,children:e.post_id?(0,Q.jsx)(U,{className:`h-auto p-0 text-left whitespace-normal hover:underline!`,title:`View post analytics`,variant:`link`,onClick:()=>{i(`/posts/analytics/${e.post_id}/`,{crossApp:!0})},children:e.post_title}):(0,Q.jsx)(Q.Fragment,{children:e.post_title})})}),(0,Q.jsx)(R,{className:`text-sm whitespace-nowrap`,children:d(e.send_date,o)}),(0,Q.jsx)(R,{className:`text-right font-mono text-sm`,children:u(e.sent_to)}),g&&(0,Q.jsxs)(R,{className:`text-right font-mono text-sm`,children:[(0,Q.jsx)(`span`,{className:`group-hover:hidden`,children:f(e.open_rate)}),(0,Q.jsx)(`span`,{className:`hidden group-hover:visible! group-hover:block!`,children:u(e.total_opens)})]}),h&&(0,Q.jsx)(R,{className:`text-right font-mono text-sm`,children:p?(0,Q.jsx)(`span`,{className:`inline-block h-4 w-8 animate-pulse rounded bg-gray-200`}):(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`span`,{className:`group-hover:hidden`,children:f(e.click_rate)}),(0,Q.jsx)(`span`,{className:`hidden group-hover:visible! group-hover:block!`,children:u(e.total_clicks)})]})})]},e.post_id))}):(0,Q.jsx)(I,{className:`border-none hover:bg-transparent`,children:(0,Q.jsx)(R,{className:`text-center group-hover:bg-transparent!`,colSpan:v,children:(0,Q.jsx)(ae,{className:`size-full py-20`,title:`No newsletters ${x(e)}`,children:(0,Q.jsx)(q,{strokeWidth:1.5})})})}),[_,p,i,h,g,e]);return l||!s?y:b});Ee.displayName=`NewsletterTableRows`;var De=Z.memo(({sortBy:e,setSortBy:t,range:n})=>{let r=(0,Z.useMemo)(()=>(0,Q.jsxs)(A,{children:[(0,Q.jsx)(M,{children:`Top newsletters`}),(0,Q.jsxs)(N,{children:[` Your best performing newsletters `,x(n)]})]}),[n]),{appSettings:i}=K(),{emailTrackClicks:a,emailTrackOpens:o}=i?.analytics||{};return(0,Q.jsx)(z,{children:(0,Q.jsxs)(I,{children:[(0,Q.jsx)(F,{className:`min-w-[320px]`,variant:`cardhead`,children:r}),(0,Q.jsx)(F,{className:`w-[65px]`,children:(0,Q.jsx)(S,{activeSortBy:e,setSortBy:t,sortBy:`date desc`,children:`Date`})}),(0,Q.jsx)(F,{className:`w-[90px] text-right`,children:(0,Q.jsx)(S,{activeSortBy:e,setSortBy:t,sortBy:`sent_to desc`,children:`Sent`})}),o&&(0,Q.jsx)(F,{className:`w-[90px] text-right`,children:(0,Q.jsx)(S,{activeSortBy:e,setSortBy:t,sortBy:`open_rate desc`,children:`Opens`})}),a&&(0,Q.jsx)(F,{className:`w-[90px] text-right`,children:(0,Q.jsx)(S,{activeSortBy:e,setSortBy:t,sortBy:`click_rate desc`,children:`Clicks`})})]})})});De.displayName=`NewsletterTableHeader`;var $=Z.memo(({range:e,selectedNewsletterId:t,shouldFetchStats:n})=>{let[r,i]=(0,Z.useState)(`open_rate desc`);return(0,Q.jsx)(P,{className:`w-full max-w-[calc(100vw-64px)] overflow-x-auto sidebar:max-w-[calc(100vw-64px-280px)]`,"data-testid":`top-newsletters-card`,children:(0,Q.jsx)(j,{children:(0,Q.jsxs)(B,{children:[(0,Q.jsx)(De,{range:e,setSortBy:i,sortBy:r}),(0,Q.jsx)(L,{children:(0,Q.jsx)(Ee,{range:e,selectedNewsletterId:t,shouldFetchStats:n,sortBy:r})})]})})})});$.displayName=`TopNewslettersTable`;var Oe=()=>{let{range:e,selectedNewsletterId:t}=J(),[n]=s(),{appSettings:r}=K(),a=n.get(`tab`)||`total-subscribers`,{data:o,isLoading:c}=pe({searchParams:{limit:`50`}}),u=!c&&o&&o.newsletters.length>0&&!!t,{data:d,isLoading:f}=Se(e,t||void 0,u||!1),{data:p,isLoading:m,isClicksLoading:h}=Te(e,`date asc`,t||void 0,u||!1),g=(0,Z.useMemo)(()=>!o?.newsletters||!t?null:o.newsletters.find(e=>e.id===t)||null,[o,t]),_=(0,Z.useMemo)(()=>{let e=g?.count?.active_members||d?.stats?.[0]?.total||0,t=0,n=0;if(p?.stats&&p.stats.length>0){let e=p.stats,r=e.reduce((e,t)=>e+(t.open_rate||0),0),i=e.reduce((e,t)=>e+(t.click_rate||0),0);t=r/e.length,n=i/e.length}return{totalSubscribers:e,avgOpenRate:t,avgClickRate:n}},[g,d,p]),v=(0,Z.useMemo)(()=>{if(!d?.stats?.[0]?.values||d.stats[0].values.length===0){let{startDate:t,endDate:n}=G(e),r=[],i=t.clone().toDate(),a=n.toDate();for(;i<=a;)r.push({date:i.toISOString().split(`T`)[0],value:0}),i.setDate(i.getDate()+1);return r}let t=d.stats[0].values;if(t.length===1){let n=t[0],r=new Date,i=e,a=new Date(r.getTime()-i*24*60*60*1e3);return[{...n,date:a.toISOString().split(`T`)[0]},{...n,date:r.toISOString().split(`T`)[0]}]}return t},[d,e]),y=(0,Z.useMemo)(()=>p?.stats?p.stats.map(e=>({post_id:e.post_id,post_title:e.post_title,send_date:e.send_date,sent_to:e.sent_to,total_opens:e.total_opens,open_rate:e.open_rate,total_clicks:e.total_clicks||0,click_rate:e.click_rate||0})):[],[p]),b=f||h||m;return r&&!r.newslettersEnabled?(0,Q.jsx)(l,{to:`/analytics`}):(0,Q.jsxs)(he,{children:[(0,Q.jsx)(ge,{children:(0,Q.jsxs)(i,{children:[(0,Q.jsx)(xe,{newsletters:o?.newsletters}),(0,Q.jsx)(me,{})]})}),(0,Q.jsx)(_e,{isLoading:!1,loadingComponent:(0,Q.jsx)(Q.Fragment,{}),children:(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(P,{"data-testid":`newsletters-card`,children:(0,Q.jsx)(j,{children:(0,Q.jsx)(be,{avgsData:y,initialTab:a,isAvgsLoading:!1,isLoading:b,subscribersData:v,totals:_})})}),(0,Q.jsx)($,{range:e,selectedNewsletterId:t,shouldFetchStats:!!u})]})})]})};export{Oe as default};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{t as r}from"./use-tinybird-query-Dz156HvZ.js";import{f as i,g as a,s as o}from"./stats-DGoXZxWE.js";import{n as s}from"./posts-EWpZIjkr.js";import{t as c}from"./analytics-53FOa2wq.js";import{a as l,t as u}from"./post-helpers-C5OQMBoi.js";import{a as d}from"./router-provider-C1R4AZ2o.js";import{c as f,f as p,l as m,p as h,s as g}from"./dist-DGzPJ_bO.js";import{a as _,i as v,n as y,t as b}from"./chart-helpers-DbklaJw9.js";import{a as x,n as S,o as C,r as w,s as T,t as E}from"./card-DGoDJzrn.js";import{t as D}from"./empty-indicator-oX1u1Pkn.js";import{$n as O,Ga as k,Hr as A,Hs as j,Ir as M,Ka as ee,Ko as te,Lo as N,Ni as ne,Oo as P,Sa as F,Va as re,Wi as I,Wr as ie,Zs as L,c as R,d as z,hs as ae,lo as B,nr as oe,ps as se,r as ce,tr as V,us as H,wo as U,ya as W,zi as le,zr as G}from"./index-BBf502Wg.js";import{n as ue,r as de,t as fe}from"./kpi-card-BrGH6FsT.js";import{i as K,n as pe,r as me,t as he}from"./stats-view-D2-1L0ms.js";import{t as ge}from"./use-growth-stats-9Db2CuJe.js";import{t as q}from"./use-analytics-data-CaT8RirX.js";import{n as _e}from"./audience-BKRdsFmy.js";import{n as J}from"./url-helpers-CCyfRrKj.js";import{t as ve}from"./post-share-modal-DBfKl2GZ.js";var Y=e(t(),1),ye=()=>{let{data:{posts:[e]}={posts:[]},isLoading:t}=s({searchParams:{filter:`status:[published,sent]`,order:`published_at DESC`,limit:`1`,include:`authors,email,count.clicks`}}),n=e,{data:r,isLoading:i}=o(n?.id||``,{enabled:!!n?.id});return{data:(0,Y.useMemo)(()=>{if(!n)return null;let e=r?.stats?.[0]||{id:n.id,recipient_count:null,opened_count:null,open_rate:null,member_delta:0,free_members:0,paid_members:0,visitors:0};return{id:n.id,uuid:n.uuid,title:n.title||``,slug:n.slug||``,feature_image:n.feature_image||null,published_at:n.published_at||``,url:n.url||``,excerpt:n.excerpt||``,email_only:n.email_only||!1,status:n.status,email:n.email,count:n.count,authors:n.authors||[],recipient_count:e.recipient_count,opened_count:e.opened_count,open_rate:e.open_rate,member_delta:e.member_delta,free_members:e.free_members,paid_members:e.paid_members,visitors:e.visitors,click_rate:null}},[n,r]),isLoading:t||!!n?.id&&i}},X=n(),be=e=>e.email_only?`Sent`:e.email?`Published and sent`:`Published`,xe=({latestPostStats:e,isLoading:t})=>{let n=d(),[r,i]=(0,Y.useState)(!1),{site:a,settings:o}=q(),{appSettings:s}=L(),{emailTrackClicks:l,emailTrackOpens:g,webAnalytics:_=!1,membersTrackSources:v=!1}=s?.analytics||{};(0,Y.useEffect)(()=>{r&&c(`Share Modal Opened`,{giftLinkShown:!1,source:`stats-overview`})},[r]);let y=a.title||String(o.find(e=>e.key===`title`)?.value||`Ghost Site`),b=String(o.find(e=>e.key===`timezone`)?.value||`Etc/UTC`),T=e?u(e,{membersTrackSources:v}):null,O=`group mr-2 flex flex-col gap-1.5 hover:cursor-pointer`,k=!!e?.email,A=J({postId:e?.id,hasEmailData:k,analytics:{webAnalytics:_,membersTrackSources:v}}),j=A.startsWith(`/editor/`);return(0,X.jsxs)(E,{className:`group/card`,"data-testid":`latest-post`,children:[(0,X.jsxs)(x,{children:[(0,X.jsx)(C,{className:`flex items-baseline justify-between leading-snug font-medium text-muted-foreground`,children:`Latest post performance`}),(0,X.jsx)(w,{className:`hidden`,children:`How your last post did`})]}),(0,X.jsxs)(S,{className:`flex flex-col gap-6 px-0 lg:flex-row xl:grid xl:grid-cols-3`,children:[t&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{className:`flex w-full items-center gap-6 px-6 xl:col-span-2`,children:[(0,X.jsx)(`div`,{className:`w-full max-w-[232px] grow`,children:(0,X.jsx)(V,{className:`aspect-[16/10] rounded-md`})}),(0,X.jsxs)(`div`,{className:`w-full grow`,children:[(0,X.jsx)(V,{className:`w-full max-w-[420px]`}),(0,X.jsx)(V,{className:`w-1/2`})]})]}),(0,X.jsx)(`div`,{className:`flex flex-col items-stretch gap-2 px-6`,children:(0,X.jsxs)(`div`,{className:`grid grid-cols-2 gap-5`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(V,{className:`w-3/4`}),(0,X.jsx)(V,{className:`h-10 w-1/3`})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(V,{className:`w-3/4`}),(0,X.jsx)(V,{className:`h-10 w-1/3`})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(V,{className:`w-3/4`}),(0,X.jsx)(V,{className:`h-10 w-1/3`})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(V,{className:`w-3/4`}),(0,X.jsx)(V,{className:`h-10 w-1/3`})]})]})})]}),!t&&e&&T?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-6 px-6 transition-all md:flex-row md:items-start xl:col-span-2`,children:[e.feature_image&&(0,X.jsx)(`div`,{className:`aspect-[16/10] w-full min-w-[100px] rounded-sm bg-cover bg-center sm:max-w-[170px] lg:max-w-[170px] xl:max-w-[232px]`,style:{backgroundImage:`url(${e.feature_image})`}}),(0,X.jsxs)(`div`,{className:`flex grow flex-col items-start justify-center self-stretch`,children:[(0,X.jsx)(`div`,{className:`text-md leading-tighter font-semibold tracking-tight hover:cursor-pointer hover:opacity-75`,onClick:()=>{!t&&e&&n(A,{crossApp:!0})},children:e.title}),(0,X.jsxs)(`div`,{className:`mt-1 text-muted-foreground`,children:[e.authors&&e.authors.length>0&&(0,X.jsxs)(`div`,{children:[`By `,e.authors.map(e=>e.name).join(`, `),` – `,m(e.published_at,b)]}),(0,X.jsx)(`div`,{className:`mt-0.5`,children:be(e)})]}),(0,X.jsxs)(`div`,{className:`mt-6 flex items-center gap-2`,children:[!e.email_only&&(0,X.jsx)(ve,{author:e.authors?.map(e=>e.name).join(`, `)||``,description:``,faviconURL:a.icon||``,featureImageURL:e.feature_image||``,open:r,postExcerpt:e.excerpt||``,postTitle:e.title,postURL:e.url||``,siteTitle:y,onClose:()=>i(!1),onOpenChange:i,children:(0,X.jsxs)(M,{onClick:()=>i(!0),children:[(0,X.jsx)(W,{}),` Share post`]})}),(0,X.jsx)(M,{className:e.email_only?`w-full`:``,variant:`outline`,onClick:()=>{n(A,{crossApp:!0})},children:j?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(re,{}),(0,X.jsx)(`span`,{className:`hidden md:visible! md:block!`,children:`Edit post`})]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(se,{}),(0,X.jsx)(`span`,{className:`hidden md:visible! md:block!`,children:e.email_only?`Post analytics`:`Analytics`})]})})]})]})]}),(0,X.jsx)(`div`,{className:`-ml-4 flex w-full flex-col items-stretch gap-2 pr-6 xl:h-full xl:max-w-none`,children:(0,X.jsxs)(`div`,{className:`grid grid-cols-2 gap-6 pl-10 lg:border-l xl:h-full`,children:[T.showWebMetrics&&_&&(0,X.jsxs)(`div`,{className:O,"data-testid":`latest-post-visitors`,onClick:()=>{n(`/posts/analytics/${e.id}/web`,{crossApp:!0})},children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-1.5 font-medium text-muted-foreground transition-all group-hover:text-foreground`,children:[(0,X.jsx)(P,{size:16,strokeWidth:1.25}),(0,X.jsx)(`span`,{className:`hidden md:visible! md:block!`,children:`Visitors`})]}),(0,X.jsx)(`span`,{className:`text-[2.2rem] leading-none font-semibold tracking-tighter`,children:p(e.visitors)})]}),T.showMemberGrowth&&(0,X.jsxs)(`div`,{className:f(O,T.showEmailMetrics&&(!T.showWebMetrics||!_)&&`col-[1/2] row-[2/3]`),"data-testid":`latest-post-members`,onClick:()=>{n(`/posts/analytics/${e.id}/growth`,{crossApp:!0})},children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-1.5 font-medium text-muted-foreground transition-all group-hover:text-foreground`,children:[(0,X.jsx)(I,{size:16,strokeWidth:1.25}),(0,X.jsx)(`span`,{className:`hidden md:visible! md:block!`,children:`Members`})]}),(0,X.jsx)(`span`,{className:`text-[2.2rem] leading-none font-semibold tracking-tighter`,children:e.member_delta?(0,X.jsxs)(X.Fragment,{children:[`+`,p(e.member_delta)]}):0})]}),T.showEmailMetrics&&e.email&&(0,X.jsxs)(X.Fragment,{children:[g&&(0,X.jsxs)(`div`,{className:O,onClick:()=>{n(`/posts/analytics/${e.id}/newsletter`,{crossApp:!0})},children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-1.5 font-medium text-muted-foreground transition-all group-hover:text-foreground`,children:[(0,X.jsx)(B,{size:16,strokeWidth:1.25}),(0,X.jsx)(`span`,{className:`hidden whitespace-nowrap md:visible! md:block!`,children:`Opens`})]}),(0,X.jsx)(`span`,{className:`text-[2.2rem] leading-none font-semibold tracking-tighter`,children:e.email.email_count?h((e.email.opened_count||0)/e.email.email_count):`0%`})]}),l&&(0,X.jsxs)(`div`,{className:O,onClick:()=>{n(`/posts/analytics/${e.id}/newsletter`,{crossApp:!0})},children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-1.5 font-medium text-muted-foreground transition-all group-hover:text-foreground`,children:[(0,X.jsx)(ee,{size:16,strokeWidth:1.25}),(0,X.jsx)(`span`,{className:`hidden whitespace-nowrap md:visible! md:block!`,children:`Clicks`})]}),(0,X.jsx)(`span`,{className:`text-[2.2rem] leading-none font-semibold tracking-tighter`,children:e.email.email_count&&e.count?.clicks?h((e.count.clicks||0)/e.email.email_count):`0%`})]})]})]})})]}):!t&&(0,X.jsx)(D,{actions:(0,X.jsx)(M,{variant:`secondary`,onClick:()=>{n(`/editor/post`,{crossApp:!0})},children:`New post`}),className:`w-full pb-10 xl:col-span-3`,description:`Once it's live, you can track performance here`,title:`Publish your first post`,children:(0,X.jsx)(N,{strokeWidth:1.5})})]})]})},Se=()=>{let{config:e}=q();return{isLimited:t=>e?.hostSettings?.limits&&t===`limitAnalytics`?e.hostSettings.limits.limitAnalytics?.disabled===!0:!1}},Z=({title:e,iconName:t,description:n,color:r,diffDirection:i,diffValue:a,formattedValue:o,trendingFromValue:s,children:c,onClick:l})=>{let{range:u}=z(),d=t&&ne[t],f=Y.useMemo(()=>{if(!i||i===`empty`||u===R.allTime.value||!a)return``;let e=i===`up`?`up`:i===`down`?`down`:`at`,t=y(u).replace(`in the `,``).replace(/^\(|\)$/g,``);return i===`same`?(0,X.jsxs)(`span`,{children:[`You're trending at the same level as `,(0,X.jsx)(`span`,{className:`font-semibold`,children:o}),` compared to the `,(0,X.jsx)(`span`,{className:`font-semibold`,children:t})]}):(0,X.jsxs)(`span`,{children:[`You're trending `,(0,X.jsxs)(`span`,{className:`font-semibold`,children:[e,` `,a]}),` from `,(0,X.jsx)(`span`,{className:`font-semibold`,children:s}),` compared to the `,t]})},[i,a,s,o,u]);return(0,X.jsxs)(E,{className:`group`,"data-testid":e,children:[(0,X.jsxs)(x,{className:`hidden`,children:[(0,X.jsx)(C,{children:e}),(0,X.jsx)(w,{children:n})]}),(0,X.jsxs)(fe,{className:`relative flex grow flex-row items-start justify-between gap-5 border-none pb-2 xl:pb-4`,children:[(0,X.jsxs)(`div`,{className:`flex grow flex-col gap-1.5 border-none pb-0`,children:[(0,X.jsxs)(ue,{className:l&&`transition-all group-hover:text-foreground`,children:[r&&(0,X.jsx)(`span`,{className:`inline-block size-2 rounded-full opacity-50`,style:{backgroundColor:r}}),d&&(0,X.jsx)(d,{size:16,strokeWidth:1.5}),e]}),(0,X.jsx)(de,{diffDirection:u===R.allTime.value?`hidden`:i,diffTooltip:f,diffValue:a,value:o})]}),l&&(0,X.jsx)(M,{className:`absolute right-6 translate-x-10 opacity-0 transition-all duration-200 group-hover:translate-x-0 group-hover:opacity-100 focus-visible:translate-x-0 focus-visible:opacity-100`,size:`sm`,variant:`outline`,onClick:l,children:`View more`})]}),(0,X.jsx)(S,{children:c})]})},Ce=({kpiValues:e,visitorsChartData:t,visitorsChartRange:n,visitorsYRange:r,growthTotals:i,membersChartData:a,mrrChartData:o,growthChartRange:s,currencySymbol:c,isLoading:l})=>{let u=d(),{appSettings:f}=L(),m=Se().isLimited(`limitAnalytics`),h=`-mb-3 h-[10vw] max-h-[200px] min-h-[100px] hover:cursor-pointer!`;if(l)return(0,X.jsx)(T,{className:`flex h-[calc(10vw+116px)] max-h-[416px] min-h-20 items-center justify-center hover:cursor-pointer!`,children:(0,X.jsx)(O,{})});let g=f?.analytics.webAnalytics,v=m&&!g,y=f?.paidMembersEnabled,b=[g,v,!0,y].filter(Boolean).length,k=`lg:grid-cols-3`;return b===2?k=`lg:grid-cols-2`:b===1&&(k=`lg:grid-cols-1`),(0,X.jsxs)(`div`,{className:`flex flex-col lg:grid ${k} gap-6`,children:[g&&!v&&(0,X.jsx)(Z,{description:`Number of individual people who visited your website`,diffDirection:`empty`,formattedValue:e.visits,iconName:`Globe`,linkto:`/analytics/web/`,title:`Unique visitors`,onClick:()=>{u(`/analytics/web/`)},children:(0,X.jsx)(_,{className:h,color:`var(--chart-blue)`,data:t,id:`visitors`,range:n,showHorizontalLines:!0,showYAxisValues:!1,syncId:`overview-charts`,yAxisRange:r})}),v&&(0,X.jsxs)(E,{children:[(0,X.jsxs)(x,{className:`hidden`,children:[(0,X.jsx)(C,{children:`Unlock web analytics`}),(0,X.jsx)(w,{children:`Get the full picture of what's working with detailed, cookie-free traffic analytics.`})]}),(0,X.jsx)(S,{className:`flex h-full items-center justify-center p-6`,children:(0,X.jsx)(D,{actions:(0,X.jsx)(M,{variant:`outline`,onClick:()=>u(`/pro`,{crossApp:!0}),children:`Upgrade now`}),className:`py-10`,description:`Get the full picture of what's working with detailed, cookie-free traffic analytics.`,title:`Unlock web analytics`,children:(0,X.jsx)(H,{})})})]}),(0,X.jsx)(Z,{description:`How number of members of your publication changed over time`,diffDirection:i.directions.total,diffValue:i.percentChanges.total,formattedValue:p(i.totalMembers),iconName:`User`,linkto:`/analytics/growth/`,title:`Members`,trendingFromValue:`${p(a[0].value)}`,onClick:()=>{u(`/analytics/growth/?tab=total-members`)},children:(0,X.jsx)(_,{className:h,color:`var(--chart-darkblue)`,data:a,id:`members`,range:s,showHorizontalLines:!0,showYAxisValues:!1,syncId:`overview-charts`})}),y&&(0,X.jsx)(Z,{description:`Monthly recurring revenue changes over time`,diffDirection:i.directions.mrr,diffValue:i.percentChanges.mrr,formattedValue:`${c}${p(G(i.mrr))}`,iconName:`Coins`,linkto:`/analytics/growth/`,title:`MRR`,trendingFromValue:`${c}${p(o[0].value)}`,onClick:()=>{u(`/analytics/growth/?tab=mrr`)},children:(0,X.jsx)(_,{className:h,color:`var(--chart-teal)`,data:o,id:`mrr`,range:s,showHorizontalLines:!0,showYAxisValues:!1,syncId:`overview-charts`})})]})},we=({className:e})=>(0,X.jsx)(`div`,{className:f(`flex flex-col items-center justify-center gap-1 rounded-sm bg-muted p-6 dark:bg-surface-elevated-2`,e),children:(0,X.jsx)(U,{className:`text-muted-foreground/50`,size:18,strokeWidth:1.5})}),Q=({className:e,metrics:t,title:n})=>(0,X.jsx)(X.Fragment,{children:(0,X.jsxs)(`div`,{className:f(`pointer-events-none absolute bottom-[calc(100%+2px)] left-1/2 z-50 min-w-[160px] -translate-x-1/2 rounded-md bg-background p-3 text-sm opacity-0 shadow-md transition-all group-hover/tooltip:bottom-[calc(100%+12px)] group-hover/tooltip:opacity-100`,e),children:[(0,X.jsx)(`div`,{className:`mb-1.5 border-b pr-10 pb-1.5 font-medium whitespace-nowrap text-muted-foreground`,children:n}),(0,X.jsx)(`div`,{className:`flex flex-col gap-1.5`,children:t?.map(e=>(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-5`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-1.5 whitespace-nowrap`,children:[e.icon,e.label]}),(0,X.jsx)(`span`,{className:`font-mono`,children:e.metric})]},e.label))})]})}),Te=({topPostsData:e,isLoading:t})=>{let n=d(),{range:r}=z(),{settings:i}=q(),{appSettings:a}=L(),o=String(i.find(e=>e.key===`timezone`)?.value||`Etc/UTC`),{webAnalytics:s=!1,membersTrackSources:c=!1,emailTrackClicks:u=!1,emailTrackOpens:f=!1}=a?.analytics||{},h=`flex items-center justify-end gap-1 rounded-md px-2 py-1 font-mono text-gray-800 hover:bg-muted-foreground/10 group-hover:text-foreground`;return(0,X.jsxs)(E,{className:`group/card w-full lg:col-span-2`,"data-testid":`top-posts-card`,children:[(0,X.jsxs)(x,{children:[(0,X.jsxs)(C,{className:`flex items-baseline justify-between leading-snug font-medium text-muted-foreground`,children:[`Top posts `,y(r)]}),(0,X.jsx)(w,{className:`hidden`,children:`Most viewed posts in this period`})]}),(0,X.jsx)(S,{children:t?(0,X.jsx)(oe,{className:`mt-6`}):(0,X.jsxs)(X.Fragment,{children:[e?.stats?.map(e=>(0,X.jsxs)(`div`,{className:`group relative flex w-full items-start justify-between gap-5 border-t border-border/50 py-4 before:absolute before:-inset-x-4 before:inset-y-0 before:z-0 before:hidden before:rounded-md before:bg-table-row-hover before:content-[""] first:border-border! hover:cursor-pointer hover:border-transparent hover:before:block md:items-center [&+div]:hover:border-transparent`,children:[(0,X.jsxs)(`div`,{className:`z-10 flex min-w-[160px] grow items-start gap-4 md:items-center lg:min-w-[320px]`,onClick:()=>{n(J({postId:e.post_id,hasEmailData:e.sent_count!==null,analytics:{webAnalytics:s,membersTrackSources:c}}),{crossApp:!0})},children:[e.feature_image?(0,X.jsx)(`div`,{className:`hidden aspect-[16/10] w-[80px] shrink-0 rounded-sm bg-cover bg-center sm:visible! sm:block! lg:w-[100px]`,style:{backgroundImage:`url(${e.feature_image})`}}):(0,X.jsx)(we,{className:`hidden aspect-[16/10] w-[80px] shrink-0 group-hover:bg-muted-foreground/10 sm:visible! sm:flex! lg:w-[100px]`}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,X.jsx)(`span`,{className:`line-clamp-2 text-md font-semibold`,children:e.title}),(0,X.jsxs)(`span`,{className:`text text-muted-foreground`,children:[`By `,e.authors,` – `,m(e.published_at,o)]}),(0,X.jsx)(`span`,{className:`text text-muted-foreground`,children:l(e)})]})]}),(0,X.jsxs)(`div`,{className:`z-10 flex flex-col items-end justify-center gap-0.5 text-sm md:flex-row md:items-center md:justify-end md:gap-3`,children:[s&&(0,X.jsxs)(`div`,{className:`group/tooltip relative flex w-[66px] lg:w-[92px]`,"data-testid":`statistics-visitors`,onClick:t=>{t.stopPropagation(),n(`/posts/analytics/${e.post_id}/web`,{crossApp:!0})},children:[(0,X.jsx)(Q,{metrics:[{icon:(0,X.jsx)(P,{className:`shrink-0 text-muted-foreground`,size:16,strokeWidth:1.5}),label:`Unique visitors`,metric:p(e.views)}],title:`Web traffic`}),(0,X.jsxs)(`div`,{className:h,children:[(0,X.jsx)(P,{className:`text-muted-foreground group-hover:text-foreground`,size:16,strokeWidth:1.5}),g(e.views)]})]}),e.sent_count!==null&&(0,X.jsxs)(`div`,{className:`group/tooltip relative flex w-[66px] lg:w-[92px]`,onClick:t=>{t.stopPropagation(),n(`/posts/analytics/${e.post_id}/newsletter`,{crossApp:!0})},children:[(0,X.jsx)(Q,{className:`${c?``:`right-0 left-auto translate-x-0`}`,metrics:[{icon:(0,X.jsx)(F,{className:`shrink-0 text-muted-foreground`,size:16,strokeWidth:1.5}),label:`Sent`,metric:p(e.sent_count||0)},...f?[{icon:(0,X.jsx)(B,{className:`shrink-0 text-muted-foreground`,size:16,strokeWidth:1.5}),label:`Opens`,metric:p(e.opened_count||0)}]:[],...u?[{icon:(0,X.jsx)(k,{className:`shrink-0 text-muted-foreground`,size:16,strokeWidth:1.5}),label:`Clicks`,metric:p(e.clicked_count||0)}]:[]],title:`Newsletter performance`}),(0,X.jsx)(`div`,{className:h,children:f?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(B,{className:`text-muted-foreground group-hover:text-foreground`,size:16,strokeWidth:1.5}),e.open_rate?`${Math.round(e.open_rate)}%`:`0%`]}):u?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(k,{className:`text-muted-foreground group-hover:text-foreground`,size:16,strokeWidth:1.5}),e.click_rate?`${Math.round(e.click_rate)}%`:`0%`]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(F,{className:`text-muted-foreground group-hover:text-foreground`,size:16,strokeWidth:1.5}),g(e.sent_count||0)]})})]}),c&&(0,X.jsxs)(`div`,{className:`group/tooltip relative flex w-[66px] lg:w-[92px]`,"data-testid":`statistics-members`,onClick:t=>{t.stopPropagation(),n(`/posts/analytics/${e.post_id}/growth`,{crossApp:!0})},children:[(0,X.jsx)(Q,{className:`right-0 left-auto translate-x-0`,metrics:[{icon:(0,X.jsx)(le,{className:`shrink-0 text-muted-foreground`,size:16,strokeWidth:1.5}),label:`Free`,metric:e.free_members>0?`+${p(e.free_members)}`:`0`},...a?.paidMembersEnabled?[{icon:(0,X.jsx)(te,{className:`shrink-0 text-muted-foreground`,size:16,strokeWidth:1.5}),label:`Paid`,metric:e.paid_members>0?`+${p(e.paid_members)}`:`0`}]:[]],title:`New members`}),(0,X.jsxs)(`div`,{className:h,children:[(0,X.jsx)(I,{className:`text-muted-foreground group-hover:text-foreground`,size:16,strokeWidth:1.5}),e.members>0?`+${p(e.members)}`:`0`]})]})]})]},e.post_id)),(!e?.stats||e.stats.length===0)&&(0,X.jsx)(D,{className:`w-full pb-10`,title:`No posts ${y(r)}`,children:(0,X.jsx)(N,{strokeWidth:1.5})})]})})]})},$=({className:e,title:t,description:n,url:r,children:i})=>(0,X.jsx)(`a`,{className:f(`group/card block rounded-xl border bg-card p-6 transition-all hover:bg-table-row-hover hover:shadow-xs`,e),href:r,rel:`noreferrer`,target:`_blank`,children:(0,X.jsxs)(`div`,{className:`flex items-center gap-6`,children:[i,(0,X.jsxs)(`div`,{className:`flex flex-col gap-0.5 leading-tight`,children:[(0,X.jsx)(`span`,{className:`text-base font-semibold`,children:t}),(0,X.jsx)(`span`,{className:`text-sm font-normal text-gray-700`,children:n})]})]})}),Ee=()=>{let{appSettings:e}=L(),{range:t}=z(),{statsConfig:n,isLoading:o}=q(),{startDate:s,endDate:c,timezone:l}=ie(t),{isLoading:u,chartData:d,totals:f,currencySymbol:m}=ge(t),{data:h,isLoading:g}=ye(),{data:_,isLoading:y}=i({searchParams:{date_from:A(s),date_to:A(c),limit:`5`,timezone:l}}),{data:x,loading:S}=r({endpoint:`api_kpis`,statsConfig:n,params:{site_uuid:n?.id||``,date_from:A(s),date_to:A(c),timezone:l,member_status:_e(ce)}}),C=(0,Y.useMemo)(()=>v(x||[],t,`visits`,`sum`)?.map(e=>{let t=Number(e.visits),n=isNaN(t)?0:t;return{date:String(e.date),value:n,formattedValue:p(n),label:`Visitors`}}),[x,t]),w=(0,Y.useMemo)(()=>b(t,x||[],{fieldName:`visits`}),[x,t]),T=(0,Y.useMemo)(()=>{let e=[0,1];if(!C||C.length===0)return e;let t=C.map(e=>e.value).filter(e=>e>=0);return t.length===0?e:[0,Math.max(...t)||e[1]]},[C]),E=(0,Y.useMemo)(()=>b(t,d||[]),[d,t]),D=(0,Y.useMemo)(()=>{if(!d||d.length===0)return[];let e=[];return e=v(d,t,`value`,`exact`),e.map(e=>({date:e.date,value:e.free+e.paid,formattedValue:p(e.free+e.paid),label:`Members`}))},[d,t]),O=(0,Y.useMemo)(()=>{if(!e?.paidMembersEnabled||!d||d.length===0)return[];let n=[];return n=v(d,t,`mrr`,`exact`),n.map(e=>({date:e.date,value:G(e.mrr),formattedValue:`${m}${p(G(e.mrr))}`,label:`MRR`}))},[d,t,m,e]),k=(0,Y.useMemo)(()=>x?.length?{visits:p(x.reduce((e,t)=>{let n=Number(t.visits);return e+(isNaN(n)?0:n)},0))}:{visits:`0`},[x]);return(0,X.jsxs)(pe,{children:[(0,X.jsx)(me,{children:(0,X.jsx)(a,{children:(0,X.jsx)(K,{excludeRanges:[`today`]})})}),(0,X.jsxs)(he,{isLoading:o,loadingComponent:(0,X.jsx)(X.Fragment,{}),children:[(0,X.jsx)(Ce,{currencySymbol:m,growthChartRange:E,growthTotals:f,isLoading:S||u,kpiValues:k,membersChartData:D,mrrChartData:O,visitorsChartData:C,visitorsChartRange:w,visitorsYRange:T}),(0,X.jsx)(xe,{isLoading:g,latestPostStats:h}),(0,X.jsx)(Te,{isLoading:y,topPostsData:_}),(0,X.jsxs)(`div`,{className:`grid grid-cols-1 gap-6 lg:grid-cols-2`,children:[(0,X.jsx)(j,{className:`mt-4 -mb-4 lg:col-span-2`,children:`Grow your audience`}),(0,X.jsx)($,{description:`Find out how to review the performance of your content and get the most out of post analytics in Ghost.`,title:`Understanding analytics in Ghost`,url:`https://ghost.org/help/native-analytics`,children:(0,X.jsx)(`div`,{className:`flex h-18 w-[100px] min-w-[100px] items-center justify-center rounded-md bg-gradient-to-tr from-[#14B8FF]/20 to-[#00BBA7]/20 p-4 opacity-80 transition-all group-hover/card:opacity-100`,children:(0,X.jsx)(ae,{className:`text-[#00BBA7]`,size:20,strokeWidth:1.5})})}),(0,X.jsx)($,{description:`Use these content distribution tactics to get more people to discover your work and increase engagement.`,title:`How to get your content seen online`,url:`https://ghost.org/resources/content-distribution/`,children:(0,X.jsx)(`div`,{className:`flex h-18 w-[100px] min-w-[100px] items-center justify-center rounded-md bg-gradient-to-tl from-[#FDC700]/20 to-[#FF2056]/20 p-4 opacity-80 transition-all group-hover/card:opacity-100`,children:(0,X.jsx)(P,{className:`text-[#FE9A00]`,size:20,strokeWidth:1.5})})})]})]})]})};export{Ee as default};