ghost 6.18.2 → 6.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/components/tryghost-i18n-6.19.0.tgz +0 -0
  2. package/components/tryghost-parse-email-address-6.19.0.tgz +0 -0
  3. package/core/built/admin/assets/{PolarAngleAxis-DALH8FDm.js → PolarAngleAxis-CGprvq8M.js} +1 -1
  4. package/core/built/admin/assets/{_baseAssignValue-D_UsvJRN.js → _baseAssignValue-Bwn07Ln5.js} +1 -1
  5. package/core/built/admin/assets/{a-large-small-DVyx4GMu.js → a-large-small-p58xibEK.js} +1 -1
  6. package/core/built/admin/assets/admin-x-settings/admin-x-settings.js +1 -1
  7. package/core/built/admin/assets/admin-x-settings/{code-editor-view-DBrulgE8.mjs → code-editor-view-DCKvO1TY.mjs} +2 -2
  8. package/core/built/admin/assets/admin-x-settings/{index-DgGwb1L-.mjs → index-BxWVtVnD.mjs} +6 -6
  9. package/core/built/admin/assets/admin-x-settings/{index-Cypgljb3.mjs → index-DyZIONe1.mjs} +2 -2
  10. package/core/built/admin/assets/admin-x-settings/{index-CsGHbqSU.mjs → index-HfMJcj2U.mjs} +2 -2
  11. package/core/built/admin/assets/admin-x-settings/{modals-rdo7i0D3.mjs → modals-CIiqfKY0.mjs} +7593 -7509
  12. package/core/built/admin/assets/{at-sign-CGNkBrZS.js → at-sign-BZPuAx5m.js} +1 -1
  13. package/core/built/admin/assets/audience-Cy9gLIa9.js +1 -0
  14. package/core/built/admin/assets/{avatar-flipboard-jqr9Aapd.js → avatar-flipboard-CLmWb5Xn.js} +1 -1
  15. package/core/built/admin/assets/{bluesky-sharing-C2749SVt.js → bluesky-sharing-BHt0oiii.js} +1 -1
  16. package/core/built/admin/assets/{chart-BAQCVPCH.js → chart--RFLGIL4.js} +1 -1
  17. package/core/built/admin/assets/{chunk.524.428356d01feabbc7b932.js → chunk.524.5c5c3f3273a86d1d9913.js} +7 -7
  18. package/core/built/admin/assets/{chunk.582.b8b41ba720f49d724992.js → chunk.582.e6c787cdf7e6de7819e0.js} +9 -9
  19. package/core/built/admin/assets/{code-editor-view-YNhJ1w71.js → code-editor-view-BW9y0JXN.js} +1 -1
  20. package/core/built/admin/assets/comments-C_lilDBp.js +1 -0
  21. package/core/built/admin/assets/content-helpers-BOnQQADZ.js +1 -0
  22. package/core/built/admin/assets/{copy-CNsHZEFR.js → copy-Bi7VpgPR.js} +1 -1
  23. package/core/built/admin/assets/{data-list-Dn5MkmyD.js → data-list-Bu3jzs1s.js} +1 -1
  24. package/core/built/admin/assets/{deleted-feed-item-Dmm_clMl.js → deleted-feed-item-B-doIIKc.js} +1 -1
  25. package/core/built/admin/assets/{edit-profile-BLSdtROQ.js → edit-profile-ZBdjFfvL.js} +1 -1
  26. package/core/built/admin/assets/{empty-indicator-C2Z0dddU.js → empty-indicator-C6BBh99D.js} +1 -1
  27. package/core/built/admin/assets/{en-DuTkaMAI.js → en-C7eSFQRw.js} +1 -1
  28. package/core/built/admin/assets/{feed-B4Xp4C2J.js → feed-CAioauwD.js} +1 -1
  29. package/core/built/admin/assets/{filters-gnOx5Z45.js → filters-DEKF0tIB.js} +1 -1
  30. package/core/built/admin/assets/{gh-chart-B2aWYkGg.js → gh-chart-D9KI0_sO.js} +1 -1
  31. package/core/built/admin/assets/{ghost-29f8f3c80e41126ba5e3c52ad5727e8a.js → ghost-6bff5c535ef015b0ed9421ceb6c699a7.js} +220 -211
  32. package/core/built/admin/assets/{growth-BysawIWe.js → growth-C6XGchvT.js} +1 -1
  33. package/core/built/admin/assets/{hash-j3sh-UI3.js → hash-DFhnGHId.js} +1 -1
  34. package/core/built/admin/assets/{inbox-1cUdr8Mm.js → inbox-p-Y5uScT.js} +1 -1
  35. package/core/built/admin/assets/{index-BVoBTlp_.js → index--VlvGKWi.js} +1 -1
  36. package/core/built/admin/assets/{index-DGBK5k9H.js → index-3uU4zg_6.js} +1 -1
  37. package/core/built/admin/assets/index-4ZkTY34B.css +1 -0
  38. package/core/built/admin/assets/{index-BhY_SbGB.js → index-BWnrLoWI.js} +1 -1
  39. package/core/built/admin/assets/{index-I9n711UW.js → index-BzU2odQq.js} +1 -1
  40. package/core/built/admin/assets/{index-mhojl7aD.js → index-CIZ_upe2.js} +1 -1
  41. package/core/built/admin/assets/{index-WjY3mGep.js → index-CS4XqyC-.js} +2 -2
  42. package/core/built/admin/assets/{index-BgrwCpgw.js → index-D17PEsUB.js} +1 -1
  43. package/core/built/admin/assets/{index-B8G0f0hb.js → index-DCTdAEHx.js} +3 -3
  44. package/core/built/admin/assets/{index-DarAAzVH.js → index-FPf-AERu.js} +1 -1
  45. package/core/built/admin/assets/index-JmqyGBro.js +1 -0
  46. package/core/built/admin/assets/{index-DKAlEWM4.js → index-LyfDjTto.js} +1 -1
  47. package/core/built/admin/assets/index-S62-c8TV.js +13 -0
  48. package/core/built/admin/assets/{index-D8CXbJm4.js → index-Wx8_AGZX.js} +1 -1
  49. package/core/built/admin/assets/{index-CkAUXgAi.js → index-jAidr8jI.js} +1 -1
  50. package/core/built/admin/assets/{index-Dz8eTtOq.js → index-lPLmWtv0.js} +1 -1
  51. package/core/built/admin/assets/koenig-lexical/index.css +1 -1
  52. package/core/built/admin/assets/koenig-lexical/koenig-lexical.js +1853 -1863
  53. package/core/built/admin/assets/koenig-lexical/koenig-lexical.umd.js +94 -94
  54. package/core/built/admin/assets/{koenig-lexical-coiS9dIC.js → koenig-lexical-CWnkYKQt.js} +77 -77
  55. package/core/built/admin/assets/{kpi-card-BEFHo2gr.js → kpi-card-B5UaJgOT.js} +1 -1
  56. package/core/built/admin/assets/{kpis-D-gz-lUk.js → kpis-Cc2RxnvZ.js} +1 -1
  57. package/core/built/admin/assets/{label-BvlHzzcJ.js → label-CW7Kmp9w.js} +1 -1
  58. package/core/built/admin/assets/{links-tdJvBrsT.js → links-wWNc9Uat.js} +1 -1
  59. package/core/built/admin/assets/{list-filter-DPE4Xj2T.js → list-filter-3EF6cVg-.js} +1 -1
  60. package/core/built/admin/assets/{lucide-react-ClQ3Iy7l.js → lucide-react-DtMIZssr.js} +214 -214
  61. package/core/built/admin/assets/{main-layout-DY96wK-_.js → main-layout-BFYhCrLn.js} +1 -1
  62. package/core/built/admin/assets/{message-square-text-Dd1XS5-H.js → message-square-text-BDZtUW-2.js} +1 -1
  63. package/core/built/admin/assets/{minus-CyEc3BE5.js → minus-CSphShdJ.js} +1 -1
  64. package/core/built/admin/assets/modals-CDWP04Iy.js +77 -0
  65. package/core/built/admin/assets/{moderation-B0fdmlig.js → moderation-qcng2_lB.js} +1 -1
  66. package/core/built/admin/assets/{newsletter-Byg3ARa5.js → newsletter-R-IYcV4M.js} +1 -1
  67. package/core/built/admin/assets/{newsletters-DbH39vgA.js → newsletters-BB4e24i1.js} +1 -1
  68. package/core/built/admin/assets/{note-Cwy-rIAF.js → note-B_bpRX66.js} +1 -1
  69. package/core/built/admin/assets/overview-Nh-IoP-v.js +1 -0
  70. package/core/built/admin/assets/{pagemenu-CkzsZrHC.js → pagemenu-Cd45frnF.js} +1 -1
  71. package/core/built/admin/assets/{post-analytics-context-BLkup0Xh.js → post-analytics-context-BST4bzps.js} +1 -1
  72. package/core/built/admin/assets/post-analytics-header-DAZPp6M8.js +1 -0
  73. package/core/built/admin/assets/{post-analytics-aA-nG9Fq.js → post-analytics-jHZOhQ8L.js} +1 -1
  74. package/core/built/admin/assets/{post-share-modal-CkvJtrRw.js → post-share-modal-D1JQfuYx.js} +1 -1
  75. package/core/built/admin/assets/posts/{comments-Bn_vn_sb.mjs → comments-C0ntS6jH.mjs} +678 -692
  76. package/core/built/admin/assets/posts/{dialog-CKPcMrj7.mjs → dialog-CXEmd-rC.mjs} +3 -3
  77. package/core/built/admin/assets/posts/{empty-indicator-kkrhP6K_.mjs → empty-indicator-CY1NEQZt.mjs} +2 -2
  78. package/core/built/admin/assets/posts/{filters-DHsxxy0F.mjs → filters-CWWDQAf0.mjs} +6 -6
  79. package/core/built/admin/assets/posts/{growth-D7ACh-oR.mjs → growth-DUnL-W24.mjs} +20 -19
  80. package/core/built/admin/assets/posts/{heading-BrKVbOxA.mjs → heading-DZWin3nG.mjs} +2 -2
  81. package/core/built/admin/assets/posts/{hooks-BBEMuLiW.mjs → hooks-DQYjPsLg.mjs} +2 -2
  82. package/core/built/admin/assets/posts/{index-C0rRguZx.mjs → index-BiGQFQkQ.mjs} +9 -9
  83. package/core/built/admin/assets/posts/{kpis-1o524OIK.mjs → kpis-DNnkyd0U.mjs} +10 -10
  84. package/core/built/admin/assets/posts/{links-JpeATx1f.mjs → links-D3nSZFlJ.mjs} +4 -4
  85. package/core/built/admin/assets/posts/{loading-indicator-BHAmSf8j.mjs → loading-indicator-CZQmPRvv.mjs} +3 -3
  86. package/core/built/admin/assets/posts/{main-layout-BTItAOQE.mjs → main-layout-D5WnaGr4.mjs} +2 -2
  87. package/core/built/admin/assets/posts/{newsletter-CQdsCEHv.mjs → newsletter-C5eikVBq.mjs} +13 -13
  88. package/core/built/admin/assets/posts/{overview-sYh4JN1D.mjs → overview-C5mCMPJY.mjs} +113 -112
  89. package/core/built/admin/assets/posts/{post-analytics-DtLt2SWx.mjs → post-analytics-Cc2NCQis.mjs} +6 -6
  90. package/core/built/admin/assets/posts/{post-analytics-context-CB1yM9fk.mjs → post-analytics-context-qXWjDzSt.mjs} +44 -41
  91. package/core/built/admin/assets/posts/{post-analytics-header-BYaWuL9W.mjs → post-analytics-header-QGsYyvhA.mjs} +11 -11
  92. package/core/built/admin/assets/posts/{post-share-modal-V0HTOBaf.mjs → post-share-modal-B9Q7FJsH.mjs} +4 -4
  93. package/core/built/admin/assets/posts/posts-C2SKGLoU.mjs +17 -0
  94. package/core/built/admin/assets/posts/posts.js +1 -1
  95. package/core/built/admin/assets/posts/{search-CLjC37AT.mjs → search-C8k0TFkh.mjs} +2 -2
  96. package/core/built/admin/assets/posts/{separator-KNoTIaJx.mjs → separator-CJnnsW1a.mjs} +5 -5
  97. package/core/built/admin/assets/posts/{sheet-DBg_SCDt.mjs → sheet-HDzKgNHc.mjs} +3 -3
  98. package/core/built/admin/assets/posts/{skeleton-DvsoolWu.mjs → skeleton-BlZGKNzB.mjs} +3 -3
  99. package/core/built/admin/assets/posts/{source-icon-OmRaTU2G.mjs → source-icon-DjBIjtaY.mjs} +3 -3
  100. package/core/built/admin/assets/posts/{stats-BC2DzntY.mjs → stats-BRVHejqx.mjs} +4 -4
  101. package/core/built/admin/assets/posts/{table-CxX9OKAj.mjs → table-D7AEpPWL.mjs} +2 -2
  102. package/core/built/admin/assets/posts/{tabs-B1jw7cBi.mjs → tabs-RcpmzDgr.mjs} +10 -10
  103. package/core/built/admin/assets/posts/{tags-BitrLT_j.mjs → tags-8k1xw8R8.mjs} +2 -2
  104. package/core/built/admin/assets/posts/{tags-BBilTo1a.mjs → tags-DNY2rBlf.mjs} +11 -11
  105. package/core/built/admin/assets/posts/{use-infinite-virtual-scroll-DaijA1ao.mjs → use-infinite-virtual-scroll-CMiIpcDA.mjs} +3 -3
  106. package/core/built/admin/assets/posts/{web-CKmyC4Xj.mjs → web-BCl5J6bB.mjs} +15 -15
  107. package/core/built/admin/assets/{posts-DDkuYoN7.js → posts-DFiJPOft.js} +1 -1
  108. package/core/built/admin/assets/{repeat-B-SL0yPM.js → repeat-Smml9n0k.js} +1 -1
  109. package/core/built/admin/assets/{reply-BdCPoUQ9.js → reply-CooY4lmk.js} +1 -1
  110. package/core/built/admin/assets/{select-C7aNW8QS.js → select-WwMsbBbg.js} +1 -1
  111. package/core/built/admin/assets/{settings-D-dhma2e.js → settings-CQEhPDQU.js} +4 -4
  112. package/core/built/admin/assets/{settings-Bzy1GNfD.js → settings-CxWtvcUf.js} +1 -1
  113. package/core/built/admin/assets/{sort-button-Dv8vjh13.js → sort-button-DFr8vezl.js} +1 -1
  114. package/core/built/admin/assets/{source-icon-DTz4isLK.js → source-icon-VpYWpwYb.js} +1 -1
  115. package/core/built/admin/assets/{sprout-BwLQTzMf.js → sprout-DRqlFJSK.js} +1 -1
  116. package/core/built/admin/assets/{square-YF1YE9ex.js → square-CwHQ9sJ2.js} +1 -1
  117. package/core/built/admin/assets/stats/audience-Caf7BjaU.mjs +269 -0
  118. package/core/built/admin/assets/stats/{url-helpers-Drq3xg0l.mjs → content-helpers-MbtAvUJh.mjs} +83 -106
  119. package/core/built/admin/assets/stats/{index-CcCyLMxL.mjs → index-BGqKbF1D.mjs} +8 -8
  120. package/core/built/admin/assets/stats/{index-DXU2rE9t.mjs → index-BTjfXOi6.mjs} +30 -30
  121. package/core/built/admin/assets/stats/{index-K7ASx7EG.mjs → index-ChjIxhHy.mjs} +5 -5
  122. package/core/built/admin/assets/stats/{index-D5mlMG4l.mjs → index-DMkZbbZs.mjs} +14 -14
  123. package/core/built/admin/assets/stats/{index-CUuQaROI.mjs → index-wT0OIw_N.mjs} +355 -335
  124. package/core/built/admin/assets/stats/{sort-button-CELUx6Zp.mjs → sort-button-B8n8fYMi.mjs} +23 -23
  125. package/core/built/admin/assets/stats/{stats-d_u_in4l.mjs → stats-CGH-0JNs.mjs} +120 -119
  126. package/core/built/admin/assets/stats/stats.js +1 -1
  127. package/core/built/admin/assets/stats/{tabs-3wLZsy0v.mjs → tabs-EQCUj3Y9.mjs} +19 -19
  128. package/core/built/admin/assets/stats/{use-growth-stats-28Sr42va.mjs → use-growth-stats--CIfag21.mjs} +3 -3
  129. package/core/built/admin/assets/{stats-C5ad0fgQ.js → stats-lnFiOQZx.js} +1 -1
  130. package/core/built/admin/assets/{stats-view-BvkxPYNX.js → stats-view-BJVawuIv.js} +1 -1
  131. package/core/built/admin/assets/{step-1-D7_s-D99.js → step-1-Bx8MiQVF.js} +1 -1
  132. package/core/built/admin/assets/{step-2-B94Yf7FF.js → step-2-CLLXppER.js} +1 -1
  133. package/core/built/admin/assets/{step-3-DswXYYf4.js → step-3-C5WrQe8u.js} +2 -2
  134. package/core/built/admin/assets/{table-D30IXfUP.js → table-2waWpIF5.js} +1 -1
  135. package/core/built/admin/assets/{tabs-CjNdfW0y.js → tabs-CBD0hW8V.js} +1 -1
  136. package/core/built/admin/assets/{tags-B0ux9_dT.js → tags-Bgw5Hrb5.js} +1 -1
  137. package/core/built/admin/assets/{tags-PGeGAafJ.js → tags-CKrBptuC.js} +1 -1
  138. package/core/built/admin/assets/{tiers-BaXK0JoI.js → tiers-CO-pz1FX.js} +1 -1
  139. package/core/built/admin/assets/{toggle-group-DdY8HF3Y.js → toggle-group-BXAZzvJ9.js} +1 -1
  140. package/core/built/admin/assets/{topic-filter-Boh22uGD.js → topic-filter-U3qUH2P_.js} +1 -1
  141. package/core/built/admin/assets/{trash-D7ZWrnDq.js → trash-CJY1Wro_.js} +1 -1
  142. package/core/built/admin/assets/{use-growth-stats-Bg0nE0WG.js → use-growth-stats-BrLZI7da.js} +1 -1
  143. package/core/built/admin/assets/{use-infinite-virtual-scroll-DoeI5IY-.js → use-infinite-virtual-scroll-CiRn3kpz.js} +2 -2
  144. package/core/built/admin/assets/{use-simple-pagination-BJzBULR3.js → use-simple-pagination-CskJ0MDP.js} +1 -1
  145. package/core/built/admin/assets/{user-round-check-BLc3L-ei.js → user-round-check-zOuzV3OS.js} +1 -1
  146. package/core/built/admin/assets/{wallet-cards-xX4QZik7.js → wallet-cards-ddLuIN-b.js} +1 -1
  147. package/core/built/admin/assets/{web-DQ2qBymm.js → web-CGbkZWn3.js} +1 -1
  148. package/core/built/admin/index.html +6 -5
  149. package/core/frontend/services/theme-engine/i18n/i18n.js +9 -14
  150. package/core/server/api/endpoints/settings-public.js +3 -1
  151. package/core/server/api/endpoints/utils/serializers/input/settings.js +6 -1
  152. package/core/server/data/migrations/versions/6.19/2026-02-10-12-00-00-add-transistor-portal-settings.js +39 -0
  153. package/core/server/data/schema/default-settings/default-settings.json +28 -0
  154. package/core/server/data/schema/schema.js +2 -2
  155. package/core/server/data/seeders/importers/offers-importer.js +2 -2
  156. package/core/server/data/tinybird/endpoints/api_top_pages_router.pipe +28 -0
  157. package/core/server/data/tinybird/endpoints/api_top_pages_v3.pipe +8 -4
  158. package/core/server/data/tinybird/tests/api_top_pages_router.yaml +74 -0
  159. package/core/server/services/comments/comments-service-emails.js +1 -4
  160. package/core/server/services/email-service/email-templates/partials/styles.hbs +43 -0
  161. package/core/server/services/koenig/node-renderers/transistor-renderer.js +23 -17
  162. package/core/server/services/members/members-api/repositories/member-repository.js +30 -6
  163. package/core/server/services/members/members-api/services/next-payment-calculator.js +28 -20
  164. package/core/server/services/members/members-api/services/payments-service.js +1 -1
  165. package/core/server/services/members/members-api/utils/add-calendar-months.js +49 -0
  166. package/core/server/services/offers/application/offer-mapper.js +2 -2
  167. package/core/server/services/offers/domain/models/offer-amount.js +16 -0
  168. package/core/server/services/offers/domain/models/offer-duration.js +3 -4
  169. package/core/server/services/offers/domain/models/offer-type.js +5 -3
  170. package/core/server/services/offers/domain/models/offer.js +8 -1
  171. package/core/server/services/staff/staff-service-emails.js +2 -0
  172. package/core/server/services/stripe/stripe-api.js +19 -0
  173. package/core/shared/config/defaults.json +1 -1
  174. package/core/shared/labs.js +0 -1
  175. package/core/shared/settings-cache/cache-manager.js +8 -0
  176. package/core/shared/settings-cache/public.js +5 -0
  177. package/package.json +5 -5
  178. package/yarn.lock +4 -4
  179. package/components/tryghost-i18n-6.18.2.tgz +0 -0
  180. package/components/tryghost-parse-email-address-6.18.2.tgz +0 -0
  181. package/core/built/admin/assets/audience-CJHVR7kD.js +0 -1
  182. package/core/built/admin/assets/comments-CPd_iCc3.js +0 -1
  183. package/core/built/admin/assets/index-B2yksBz4.js +0 -13
  184. package/core/built/admin/assets/index-Cl_EPbQ2.js +0 -1
  185. package/core/built/admin/assets/index-D_sGUCda.css +0 -1
  186. package/core/built/admin/assets/modals-C06GcVIm.js +0 -77
  187. package/core/built/admin/assets/overview-CVMLGrVt.js +0 -1
  188. package/core/built/admin/assets/post-analytics-header-D9srAPT5.js +0 -1
  189. package/core/built/admin/assets/posts/posts-DeQT3knv.mjs +0 -21
  190. package/core/built/admin/assets/stats/audience-BWqU7WWT.mjs +0 -245
  191. package/core/built/admin/assets/url-helpers-mt6MBIi0.js +0 -1
@@ -1,4 +1,4 @@
1
- import{r as o,j as n,cq as Cn,cr as Sn,B as A,ch as Wn,ct as zn,cs as Kn,e as rn,cV as Vn,b as En,d1 as gn,S as E,P as Yn,A as Qn,h as Zn,g as fn,d as Jn,n as Xn,bu as Gn,f as pn,F as an,i as on,d2 as ne,o as ee,a as te,u as ae,p as oe,L as re,aR as ie,D as de,t as ce,v as se,w as le,a9 as ge,d3 as pe,d4 as ue,bm as bn,bn as he}from"./index-B8G0f0hb.js";import{M as me}from"./minus-CyEc3BE5.js";import{u as ke,D as fe,A as be,S as xn}from"./deleted-feed-item-Dmm_clMl.js";import{T as xe}from"./topic-filter-Boh22uGD.js";import{E as vn}from"./empty-indicator-C2Z0dddU.js";import{I as yn}from"./inbox-1cUdr8Mm.js";import"./trash-D7ZWrnDq.js";const un=["1.5rem","1.6rem","1.7rem","1.8rem","2rem"],U={BACKGROUND_COLOR:"ghost-ap-background-color",FONT_SIZE:"ghost-ap-font-size",FONT_STYLE:"ghost-ap-font-style"},P={SYSTEM:{id:"system",color:"#fff",background:"bg-white dark:bg-black",button:"bg-white dark:bg-black",border:"border-black/[8%] dark:border-gray-950"},SEPIA:{id:"sepia",color:"#FCF8F1",background:"bg-[#FCF8F1]",button:"bg-[#FCF8F1] hover:bg-black/[3%] text-black hover:text-black",border:"border-black/[8%]"},LIGHT:{id:"light",color:"#fff",background:"bg-white",button:"hover:bg-black/[3%] text-black hover:text-black",border:"border-black/[8%] dark:border-gray-950"},DARK:{id:"dark",color:"#15171a",background:"bg-black",button:"text-white dark:bg-black dark:hover:bg-gray-900",border:"border-black/[8%] dark:border-gray-950"}},ve=()=>{const[a,s]=o.useState(()=>localStorage.getItem(U.BACKGROUND_COLOR)?.toUpperCase()||"SYSTEM"),[t,p]=o.useState(()=>{const r=localStorage.getItem(U.FONT_SIZE);return r?parseInt(r):2}),[c,k]=o.useState(()=>localStorage.getItem(U.FONT_STYLE)||"sans"),i=r=>{s(r),localStorage.setItem(U.BACKGROUND_COLOR,P[r].id)};return o.useEffect(()=>{localStorage.setItem(U.FONT_SIZE,t.toString())},[t]),o.useEffect(()=>{localStorage.setItem(U.FONT_STYLE,c)},[c]),{backgroundColor:a,currentFontSizeIndex:t,fontStyle:c,handleColorChange:i,setFontStyle:k,increaseFontSize:()=>{p(r=>Math.min(r+1,un.length-1))},decreaseFontSize:()=>{p(r=>Math.max(r-1,0))},resetFontSize:()=>p(2),fontSize:un[t]}},wn=({backgroundColor:a,currentFontSizeIndex:s,fontStyle:t,onColorChange:p,onFontStyleChange:c,onDecreaseFontSize:k,onIncreaseFontSize:i,onResetFontSize:u,onOpenChange:v})=>{const h=l=>a===l,r=l=>t===l;return n.jsx(ye,{backgroundColor:a,currentFontSizeIndex:s,fontStyle:t,isActiveColor:h,isActiveFont:r,onColorChange:p,onDecreaseFontSize:k,onFontStyleChange:c,onIncreaseFontSize:i,onOpenChange:v,onResetFontSize:u})},ye=({backgroundColor:a,isActiveColor:s,isActiveFont:t,onColorChange:p,onFontStyleChange:c,currentFontSizeIndex:k,onDecreaseFontSize:i,onIncreaseFontSize:u,onResetFontSize:v,onOpenChange:h})=>n.jsxs(Cn,{modal:!1,onOpenChange:h,children:[n.jsx(Sn,{asChild:!0,children:n.jsx(A,{className:`size-9 rounded-full ${P[a].button}`,variant:"ghost",children:n.jsx(Wn.Typography,{className:"!size-[18px]"})})}),n.jsx(zn,{align:"end",className:"w-[224px]",onCloseAutoFocus:r=>r.preventDefault(),onOpenAutoFocus:r=>r.preventDefault(),children:n.jsxs("div",{className:"flex flex-col gap-4",children:[n.jsxs("div",{className:"flex items-center justify-between gap-[6px]",children:[n.jsx(A,{className:`h-7 flex-1 rounded-[6px] bg-gray-200 p-0 text-[1.1rem] text-black hover:bg-gray-250 dark:bg-gray-925 dark:text-white dark:hover:bg-gray-900 [&_svg]:size-[14px] ${s("SYSTEM")?"outline outline-2 outline-green":""}`,variant:"secondary",onClick:()=>p("SYSTEM"),children:"Auto"}),n.jsx(A,{className:`h-7 flex-1 rounded-[6px] bg-[#ece6d9] p-0 hover:bg-[#ece6d9] ${s("SEPIA")?"outline outline-2 outline-green":"border border-[#ece6d9]"}`,onClick:()=>p("SEPIA")}),n.jsx(A,{className:`h-7 flex-1 rounded-[6px] bg-white p-0 hover:bg-white ${s("LIGHT")?"outline outline-2 outline-green":"border border-gray-200"}`,onClick:()=>p("LIGHT")}),n.jsx(A,{className:`h-7 flex-1 rounded-[6px] bg-black p-0 hover:bg-black dark:border dark:border-gray-925 ${s("DARK")?"outline outline-2 outline-green":""}`,onClick:()=>p("DARK")})]}),n.jsxs("div",{className:"flex gap-2",children:[n.jsxs(A,{className:`flex h-auto w-full flex-col gap-1 rounded-[6px] bg-gray-200 text-black hover:bg-gray-250 dark:bg-gray-925 dark:text-white dark:hover:bg-gray-900 ${t("sans")&&"outline outline-2 outline-green"}`,variant:"secondary",onClick:()=>c("sans"),children:[n.jsx("span",{className:"text-[2rem] font-bold leading-none",children:"Aa"}),n.jsx("span",{className:"text-[1.1rem]",children:"System"})]}),n.jsxs(A,{className:`flex h-auto w-full flex-col gap-1 rounded-[6px] bg-gray-200 text-black hover:bg-gray-250 dark:bg-gray-925 dark:text-white dark:hover:bg-gray-900 ${t("serif")&&"outline outline-2 outline-green"}`,variant:"secondary",onClick:()=>c("serif"),children:[n.jsx("span",{className:"pt-1 font-serif text-[2rem] font-bold leading-none",children:"Aa"}),n.jsx("span",{className:"font-serif text-[1.2rem]",children:"Serif"})]})]}),n.jsxs("div",{className:"flex gap-2",children:[n.jsx(A,{className:"h-8 w-full rounded-[6px] bg-gray-200 text-black hover:bg-gray-250 dark:bg-gray-925 dark:text-white dark:hover:bg-gray-900 [&_svg]:size-[14px]",disabled:k===0,variant:"secondary",onClick:i,children:n.jsx(me,{})}),n.jsx(A,{className:"h-8 w-full rounded-[6px] bg-gray-200 text-black hover:bg-gray-250 dark:bg-gray-925 dark:text-white dark:hover:bg-gray-900",variant:"secondary",onClick:v,children:n.jsx("span",{className:"text-[1.6rem] font-bold",children:"Aa"})}),n.jsx(A,{className:"h-8 w-full rounded-[6px] bg-gray-200 text-black hover:bg-gray-250 dark:bg-gray-925 dark:text-white dark:hover:bg-gray-900 [&_svg]:size-[14px]",disabled:k===un.length-1,variant:"secondary",onClick:u,children:n.jsx(Kn,{})})]})]})})]}),we=({tocItems:a,iframeElement:s,modalRef:t,className:p="!visible absolute inset-y-0 right-7 z-40 hidden lg:!block",onOpenChange:c})=>{const[k,i]=o.useState(null),u=rn.useRef(!1),v=h=>{if(!s?.contentDocument)return;const r=s.contentDocument.getElementById(h);r&&t.current&&(u.current=!0,i(h),t.current.scrollTo({top:r.offsetTop-20,behavior:"smooth"}),setTimeout(()=>{u.current=!1},1e3))};return o.useEffect(()=>{if(!s?.contentDocument||a.length<=1)return;const h=t.current;if(!h)return;const r=()=>{if(u.current)return;const d=s.contentDocument;if(!d)return;const _=h.scrollTop,F=100,D=a.map(S=>d.getElementById(S.id)).filter(S=>S!==null).map(S=>({id:S.id,top:S.offsetTop}));if(!D.length)return;const L=D.reduce((S,M)=>M.top-F<=_?M:S);i(L?.id||null)},l=()=>{requestAnimationFrame(r)};return h.addEventListener("scroll",l),r(),()=>{h.removeEventListener("scroll",l)}},[s,a,t]),a.length<=1?null:n.jsx("div",{className:p,children:n.jsx("div",{className:"sticky top-1/2 -translate-y-1/2",children:n.jsx(Se,{activeHeading:k||"",items:a,onItemClick:v,onOpenChange:c})})})},je={1:"w-3",2:"w-2",3:"w-1"},Ce={1:"pl-2",2:"pl-6",3:"pl-10"},Se=({items:a,activeHeading:s,onItemClick:t,onOpenChange:p})=>{const[c,k]=o.useState(!1),i=rn.useRef();if(rn.useEffect(()=>()=>{i.current&&clearTimeout(i.current)},[]),a.length===0)return null;const u=d=>Math.min(d,3),v=d=>je[u(d)],h=d=>Ce[u(d)],r=()=>{i.current&&clearTimeout(i.current),k(!0),p?.(!0)},l=()=>{i.current=setTimeout(()=>{k(!1),p?.(!1)},100)};return n.jsxs(Cn,{modal:!1,open:c,onOpenChange:k,children:[n.jsx(Sn,{asChild:!0,children:n.jsx("div",{className:"absolute right-2 top-1/2 flex -translate-y-1/2 flex-col items-end gap-2 rounded-md p-2 text-base dark:bg-black",onMouseEnter:r,onMouseLeave:l,children:a.map(d=>n.jsx("div",{className:`h-[2px] rounded-sm ${s===d.id?"bg-black dark:bg-white":"bg-gray-400 dark:bg-gray-700"} pr-1 transition-all ${v(d.level)}`},d.id))})}),n.jsx(zn,{align:"center",className:"w-[240px] p-2",side:"left",sideOffset:-28,onCloseAutoFocus:d=>d.preventDefault(),onMouseEnter:r,onMouseLeave:l,onOpenAutoFocus:d=>d.preventDefault(),children:n.jsx("nav",{"aria-label":"Table of contents navigation",className:"max-h-[60vh] overflow-y-auto",role:"navigation",children:a.map(d=>n.jsx("button",{className:`line-clamp-2 block w-full cursor-pointer rounded py-1 text-left text-sm leading-tight ${s===d.id?"text-black dark:text-white":"text-gray-700 dark:text-gray-600"} hover:bg-gray-75 hover:text-gray-900 dark:hover:bg-grey-925 dark:hover:text-white ${h(d.level)}`,type:"button",onClick:()=>t(d.id),children:n.jsx("span",{className:"line-clamp-2",children:d.text})},d.id))})})]})},ze=()=>`<style>
1
+ import{r as o,j as n,cq as Cn,cr as Sn,B as A,ch as Wn,ct as zn,cs as Kn,e as rn,cV as Vn,b as En,d1 as gn,S as E,P as Yn,A as Qn,h as Zn,g as fn,d as Jn,n as Xn,br as Gn,f as pn,F as an,i as on,d2 as ne,o as ee,a as te,u as ae,p as oe,L as re,aR as ie,D as de,t as ce,v as se,w as le,a9 as ge,d3 as pe,d4 as ue,bj as bn,bk as he}from"./index-DCTdAEHx.js";import{M as me}from"./minus-CSphShdJ.js";import{u as ke,D as fe,A as be,S as xn}from"./deleted-feed-item-B-doIIKc.js";import{T as xe}from"./topic-filter-U3qUH2P_.js";import{E as vn}from"./empty-indicator-C6BBh99D.js";import{I as yn}from"./inbox-p-Y5uScT.js";import"./trash-CJY1Wro_.js";const un=["1.5rem","1.6rem","1.7rem","1.8rem","2rem"],U={BACKGROUND_COLOR:"ghost-ap-background-color",FONT_SIZE:"ghost-ap-font-size",FONT_STYLE:"ghost-ap-font-style"},P={SYSTEM:{id:"system",color:"#fff",background:"bg-white dark:bg-black",button:"bg-white dark:bg-black",border:"border-black/[8%] dark:border-gray-950"},SEPIA:{id:"sepia",color:"#FCF8F1",background:"bg-[#FCF8F1]",button:"bg-[#FCF8F1] hover:bg-black/[3%] text-black hover:text-black",border:"border-black/[8%]"},LIGHT:{id:"light",color:"#fff",background:"bg-white",button:"hover:bg-black/[3%] text-black hover:text-black",border:"border-black/[8%] dark:border-gray-950"},DARK:{id:"dark",color:"#15171a",background:"bg-black",button:"text-white dark:bg-black dark:hover:bg-gray-900",border:"border-black/[8%] dark:border-gray-950"}},ve=()=>{const[a,s]=o.useState(()=>localStorage.getItem(U.BACKGROUND_COLOR)?.toUpperCase()||"SYSTEM"),[t,p]=o.useState(()=>{const r=localStorage.getItem(U.FONT_SIZE);return r?parseInt(r):2}),[c,k]=o.useState(()=>localStorage.getItem(U.FONT_STYLE)||"sans"),i=r=>{s(r),localStorage.setItem(U.BACKGROUND_COLOR,P[r].id)};return o.useEffect(()=>{localStorage.setItem(U.FONT_SIZE,t.toString())},[t]),o.useEffect(()=>{localStorage.setItem(U.FONT_STYLE,c)},[c]),{backgroundColor:a,currentFontSizeIndex:t,fontStyle:c,handleColorChange:i,setFontStyle:k,increaseFontSize:()=>{p(r=>Math.min(r+1,un.length-1))},decreaseFontSize:()=>{p(r=>Math.max(r-1,0))},resetFontSize:()=>p(2),fontSize:un[t]}},wn=({backgroundColor:a,currentFontSizeIndex:s,fontStyle:t,onColorChange:p,onFontStyleChange:c,onDecreaseFontSize:k,onIncreaseFontSize:i,onResetFontSize:u,onOpenChange:v})=>{const h=l=>a===l,r=l=>t===l;return n.jsx(ye,{backgroundColor:a,currentFontSizeIndex:s,fontStyle:t,isActiveColor:h,isActiveFont:r,onColorChange:p,onDecreaseFontSize:k,onFontStyleChange:c,onIncreaseFontSize:i,onOpenChange:v,onResetFontSize:u})},ye=({backgroundColor:a,isActiveColor:s,isActiveFont:t,onColorChange:p,onFontStyleChange:c,currentFontSizeIndex:k,onDecreaseFontSize:i,onIncreaseFontSize:u,onResetFontSize:v,onOpenChange:h})=>n.jsxs(Cn,{modal:!1,onOpenChange:h,children:[n.jsx(Sn,{asChild:!0,children:n.jsx(A,{className:`size-9 rounded-full ${P[a].button}`,variant:"ghost",children:n.jsx(Wn.Typography,{className:"!size-[18px]"})})}),n.jsx(zn,{align:"end",className:"w-[224px]",onCloseAutoFocus:r=>r.preventDefault(),onOpenAutoFocus:r=>r.preventDefault(),children:n.jsxs("div",{className:"flex flex-col gap-4",children:[n.jsxs("div",{className:"flex items-center justify-between gap-[6px]",children:[n.jsx(A,{className:`h-7 flex-1 rounded-[6px] bg-gray-200 p-0 text-[1.1rem] text-black hover:bg-gray-250 dark:bg-gray-925 dark:text-white dark:hover:bg-gray-900 [&_svg]:size-[14px] ${s("SYSTEM")?"outline outline-2 outline-green":""}`,variant:"secondary",onClick:()=>p("SYSTEM"),children:"Auto"}),n.jsx(A,{className:`h-7 flex-1 rounded-[6px] bg-[#ece6d9] p-0 hover:bg-[#ece6d9] ${s("SEPIA")?"outline outline-2 outline-green":"border border-[#ece6d9]"}`,onClick:()=>p("SEPIA")}),n.jsx(A,{className:`h-7 flex-1 rounded-[6px] bg-white p-0 hover:bg-white ${s("LIGHT")?"outline outline-2 outline-green":"border border-gray-200"}`,onClick:()=>p("LIGHT")}),n.jsx(A,{className:`h-7 flex-1 rounded-[6px] bg-black p-0 hover:bg-black dark:border dark:border-gray-925 ${s("DARK")?"outline outline-2 outline-green":""}`,onClick:()=>p("DARK")})]}),n.jsxs("div",{className:"flex gap-2",children:[n.jsxs(A,{className:`flex h-auto w-full flex-col gap-1 rounded-[6px] bg-gray-200 text-black hover:bg-gray-250 dark:bg-gray-925 dark:text-white dark:hover:bg-gray-900 ${t("sans")&&"outline outline-2 outline-green"}`,variant:"secondary",onClick:()=>c("sans"),children:[n.jsx("span",{className:"text-[2rem] font-bold leading-none",children:"Aa"}),n.jsx("span",{className:"text-[1.1rem]",children:"System"})]}),n.jsxs(A,{className:`flex h-auto w-full flex-col gap-1 rounded-[6px] bg-gray-200 text-black hover:bg-gray-250 dark:bg-gray-925 dark:text-white dark:hover:bg-gray-900 ${t("serif")&&"outline outline-2 outline-green"}`,variant:"secondary",onClick:()=>c("serif"),children:[n.jsx("span",{className:"pt-1 font-serif text-[2rem] font-bold leading-none",children:"Aa"}),n.jsx("span",{className:"font-serif text-[1.2rem]",children:"Serif"})]})]}),n.jsxs("div",{className:"flex gap-2",children:[n.jsx(A,{className:"h-8 w-full rounded-[6px] bg-gray-200 text-black hover:bg-gray-250 dark:bg-gray-925 dark:text-white dark:hover:bg-gray-900 [&_svg]:size-[14px]",disabled:k===0,variant:"secondary",onClick:i,children:n.jsx(me,{})}),n.jsx(A,{className:"h-8 w-full rounded-[6px] bg-gray-200 text-black hover:bg-gray-250 dark:bg-gray-925 dark:text-white dark:hover:bg-gray-900",variant:"secondary",onClick:v,children:n.jsx("span",{className:"text-[1.6rem] font-bold",children:"Aa"})}),n.jsx(A,{className:"h-8 w-full rounded-[6px] bg-gray-200 text-black hover:bg-gray-250 dark:bg-gray-925 dark:text-white dark:hover:bg-gray-900 [&_svg]:size-[14px]",disabled:k===un.length-1,variant:"secondary",onClick:u,children:n.jsx(Kn,{})})]})]})})]}),we=({tocItems:a,iframeElement:s,modalRef:t,className:p="!visible absolute inset-y-0 right-7 z-40 hidden lg:!block",onOpenChange:c})=>{const[k,i]=o.useState(null),u=rn.useRef(!1),v=h=>{if(!s?.contentDocument)return;const r=s.contentDocument.getElementById(h);r&&t.current&&(u.current=!0,i(h),t.current.scrollTo({top:r.offsetTop-20,behavior:"smooth"}),setTimeout(()=>{u.current=!1},1e3))};return o.useEffect(()=>{if(!s?.contentDocument||a.length<=1)return;const h=t.current;if(!h)return;const r=()=>{if(u.current)return;const d=s.contentDocument;if(!d)return;const _=h.scrollTop,F=100,D=a.map(S=>d.getElementById(S.id)).filter(S=>S!==null).map(S=>({id:S.id,top:S.offsetTop}));if(!D.length)return;const L=D.reduce((S,M)=>M.top-F<=_?M:S);i(L?.id||null)},l=()=>{requestAnimationFrame(r)};return h.addEventListener("scroll",l),r(),()=>{h.removeEventListener("scroll",l)}},[s,a,t]),a.length<=1?null:n.jsx("div",{className:p,children:n.jsx("div",{className:"sticky top-1/2 -translate-y-1/2",children:n.jsx(Se,{activeHeading:k||"",items:a,onItemClick:v,onOpenChange:c})})})},je={1:"w-3",2:"w-2",3:"w-1"},Ce={1:"pl-2",2:"pl-6",3:"pl-10"},Se=({items:a,activeHeading:s,onItemClick:t,onOpenChange:p})=>{const[c,k]=o.useState(!1),i=rn.useRef();if(rn.useEffect(()=>()=>{i.current&&clearTimeout(i.current)},[]),a.length===0)return null;const u=d=>Math.min(d,3),v=d=>je[u(d)],h=d=>Ce[u(d)],r=()=>{i.current&&clearTimeout(i.current),k(!0),p?.(!0)},l=()=>{i.current=setTimeout(()=>{k(!1),p?.(!1)},100)};return n.jsxs(Cn,{modal:!1,open:c,onOpenChange:k,children:[n.jsx(Sn,{asChild:!0,children:n.jsx("div",{className:"absolute right-2 top-1/2 flex -translate-y-1/2 flex-col items-end gap-2 rounded-md p-2 text-base dark:bg-black",onMouseEnter:r,onMouseLeave:l,children:a.map(d=>n.jsx("div",{className:`h-[2px] rounded-sm ${s===d.id?"bg-black dark:bg-white":"bg-gray-400 dark:bg-gray-700"} pr-1 transition-all ${v(d.level)}`},d.id))})}),n.jsx(zn,{align:"center",className:"w-[240px] p-2",side:"left",sideOffset:-28,onCloseAutoFocus:d=>d.preventDefault(),onMouseEnter:r,onMouseLeave:l,onOpenAutoFocus:d=>d.preventDefault(),children:n.jsx("nav",{"aria-label":"Table of contents navigation",className:"max-h-[60vh] overflow-y-auto",role:"navigation",children:a.map(d=>n.jsx("button",{className:`line-clamp-2 block w-full cursor-pointer rounded py-1 text-left text-sm leading-tight ${s===d.id?"text-black dark:text-white":"text-gray-700 dark:text-gray-600"} hover:bg-gray-75 hover:text-gray-900 dark:hover:bg-grey-925 dark:hover:text-white ${h(d.level)}`,type:"button",onClick:()=>t(d.id),children:n.jsx("span",{className:"line-clamp-2",children:d.text})},d.id))})})]})},ze=()=>`<style>
2
2
 
3
3
  /* Variables */
4
4
 
@@ -1 +1 @@
1
- import{r as c,bV as G,aP as te,bG as se,bW as K,aj as D,j as e,aQ as ee,ai as y,bH as pe,ap as he,bI as xe,bJ as Y,bX as fe,bR as ae,af as Q,ag as $,bY as ge,e as U,bE as be,B as je}from"./index-B8G0f0hb.js";import{s as ve,g as J,S as ke,a as we,D as Ne,b as Se}from"./stats-view-BvkxPYNX.js";import{C as ye,a as _e,R as Ce,B as Te}from"./chart-BAQCVPCH.js";import{E as re}from"./empty-indicator-C2Z0dddU.js";import{G as De,C as Me,X as Le,Y as Re}from"./gh-chart-B2aWYkGg.js";import{T as Ee,a as Be,K as X,d as B,e as Pe}from"./tabs-CjNdfW0y.js";import{B as Oe,S as H}from"./sort-button-Dv8vjh13.js";import{M as ne}from"./wallet-cards-xX4QZik7.js";import{S as Ae,a as Ve,b as ze,c as He,d as We,e as $e,f as Ge}from"./select-C7aNW8QS.js";import{M as Ke}from"./lucide-react-ClQ3Iy7l.js";import{j as Fe,C as le,c as ie,a as Ie,b as Ye,f as Xe}from"./pagemenu-CkzsZrHC.js";import{a as Qe,e as Ue,b as Je,c as W,d as O,f as L}from"./table-D30IXfUP.js";import{u as qe}from"./newsletters-DbH39vgA.js";import{e as Ze,f as et,g as tt}from"./stats-C5ad0fgQ.js";import"./message-square-text-Dd1XS5-H.js";import"./sprout-BwLQTzMf.js";import"./_baseAssignValue-D_UsvJRN.js";import"./index-DKAlEWM4.js";import"./a-large-small-DVyx4GMu.js";import"./at-sign-CGNkBrZS.js";import"./copy-CNsHZEFR.js";import"./hash-j3sh-UI3.js";import"./inbox-1cUdr8Mm.js";import"./list-filter-DPE4Xj2T.js";import"./minus-CyEc3BE5.js";import"./tags-PGeGAafJ.js";import"./square-YF1YE9ex.js";import"./user-round-check-BLc3L-ei.js";import"./repeat-B-SL0yPM.js";import"./reply-BdCPoUQ9.js";import"./trash-D7ZWrnDq.js";const st=({active:a,payload:s})=>{if(!a||!s?.length)return null;const r=s[0].payload,l=r.send_date;return e.jsxs("div",{className:"min-w-[220px] max-w-[240px] rounded-lg border bg-background px-3 py-2 shadow-lg",children:[e.jsxs("div",{className:"mb-2 flex w-full flex-col border-b pb-2",children:[e.jsx("span",{className:"text-sm font-semibold leading-tight",children:r.post_title}),e.jsxs("span",{className:"text-sm text-muted-foreground",children:["Sent on ",ae(l)]})]}),e.jsxs("div",{className:"mb-1 flex w-full justify-between",children:[e.jsx("span",{className:"font-medium text-muted-foreground",children:"Sent"}),e.jsx("div",{className:"ml-2 w-full text-right font-mono",children:D(r.sent_to)})]}),e.jsxs("div",{className:"mb-1 flex w-full justify-between",children:[e.jsx("span",{className:"font-medium text-muted-foreground",children:"Opens"}),e.jsxs("div",{className:"ml-2 w-full text-right font-mono",children:[e.jsxs("span",{className:"text-muted-foreground",children:[D(r.total_opens)," / "]}),y(r.open_rate)]})]}),e.jsxs("div",{className:"mb-1 flex w-full justify-between",children:[e.jsx("span",{className:"font-medium text-muted-foreground",children:"Clicks"}),e.jsxs("div",{className:"ml-2 w-full text-right font-mono",children:[e.jsxs("span",{className:"text-muted-foreground",children:[D(r.total_clicks)," / "]}),y(r.click_rate)]})]})]})},at=({subscribersData:a,avgsData:s,totals:r,isLoading:l,isAvgsLoading:t,initialTab:i="total-subscribers"})=>{const[n,h]=c.useState(i),[p,j]=c.useState(!1),{range:u}=G(),w=te(),[g]=se(),{appSettings:N}=K(),{emailTrackClicks:v,emailTrackOpens:S}=N?.analytics||{},{totalSubscribers:R,avgOpenRate:m,avgClickRate:d}=r,f=c.useMemo(()=>{if(!a||a.length===0)return[];let o=[];return o=ve(a,u,"value","exact"),o.map(M=>({...M,formattedValue:D(M.value),label:"Total Subscribers"}))},[a,u]),_=c.useMemo(()=>{if(!f||f.length<=1)return{direction:"same",value:"0%"};const o=f[0]?.value??0,k=f[f.length-1]?.value??0;let M="same";k>o?M="up":k<o&&(M="down");let P;if(o===0)P=k===0?"0%":"+100%";else{const A=(k-o)/o*100,V=Math.round(A*10)/10;P=`${A>=0?"+":""}${V}%`}return{direction:M,value:P}},[f]);c.useEffect(()=>{h(i)},[i]);const x=o=>{h(o);const k=new URLSearchParams(g);k.set("tab",o),w(`?${k.toString()}`,{replace:!0})},C={open_rate:{label:"Open rate"}},b=c.useMemo(()=>({"total-subscribers":{color:"hsl(var(--chart-darkblue))",datakey:"value"},"avg-open-rate":{color:"hsl(var(--chart-blue))",datakey:"open_rate"},"avg-click-rate":{color:"hsl(var(--chart-teal))",datakey:"click_rate"}}),[]),{barDomain:T,barTicks:E}=c.useMemo(()=>{if(!s||s.length===0||n==="total-subscribers")return{barDomain:[0,1],barTicks:[0,1]};const o=b[n]?.datakey;if(!o)return{barDomain:[0,1],barTicks:[0,1]};const k=s.map(I=>I[o]).filter(I=>typeof I=="number");if(k.length===0)return{barDomain:[0,1],barTicks:[0,1]};const M=Math.min(...k),P=Math.max(...k),A=Math.floor(M*10)/10,V=Math.ceil(P*10)/10,z=Math.max(0,A),Z=V===z?z+.1:V;return{barDomain:[z,Z],barTicks:[z,Z]}},[s,n,b]);if(l)return e.jsx("div",{className:"-mb-6 flex h-[calc(16vw+132px)] w-full items-start justify-center",children:e.jsx(ee,{})});let F="grid-cols-3";(!v||!S)&&(F="grid-cols-2"),!v&&!S&&(F="grid-cols-1");const ue=n==="avg-open-rate"&&m>T[0]&&m<T[1]||n==="avg-click-rate"&&d>T[0]&&d<T[1],q=n==="avg-open-rate"?m:d;return e.jsxs(Ee,{defaultValue:i,variant:"kpis",children:[e.jsxs(Be,{className:`-mx-6 hidden grid-cols-3 md:!visible md:!grid ${F}`,children:[e.jsx(X,{className:`${!S&&!v&&"cursor-auto after:hidden"}`,value:"total-subscribers",onClick:()=>{x("total-subscribers")},children:e.jsx(B,{color:b["total-subscribers"].color,"data-testid":"total-subscribers-value",diffDirection:_.direction,diffValue:_.value,label:"Total subscribers",value:D(R)})}),S&&e.jsx(X,{value:"avg-open-rate",onClick:()=>{x("avg-open-rate")},children:e.jsx(B,{className:t?"opacity-50":"",color:b["avg-open-rate"].color,label:"Avg. open rate",value:y(m)})}),v&&e.jsx(X,{value:"avg-click-rate",onClick:()=>{x("avg-click-rate")},children:e.jsx(B,{className:t?"opacity-50":"",color:b["avg-click-rate"].color,label:"Avg. click rate",value:y(d)})})]}),e.jsxs(pe,{children:[e.jsx(he,{className:"md:hidden",asChild:!0,children:e.jsxs(Pe,{children:[n==="total-subscribers"&&e.jsx(B,{color:b["total-subscribers"].color,label:"Total subscribers",value:D(R)}),n==="avg-open-rate"&&S&&e.jsx(B,{className:t?"opacity-50":"",color:b["avg-open-rate"].color,label:"Avg. open rate",value:y(m)}),n==="avg-click-rate"&&v&&e.jsx(B,{className:t?"opacity-50":"",color:b["avg-click-rate"].color,label:"Avg. click rate",value:y(d)})]})}),e.jsxs(xe,{align:"end",className:"w-56",children:[e.jsx(Y,{onClick:()=>x("total-subscribers"),children:"Total subscribers"}),S&&e.jsx(Y,{onClick:()=>x("avg-open-rate"),children:"Avg. open rate"}),v&&e.jsx(Y,{onClick:()=>x("avg-click-rate"),children:"Avg. click rate"})]})]}),e.jsxs("div",{className:"my-4 [&_.recharts-cartesian-axis-tick-value]:fill-gray-500",children:[n==="total-subscribers"&&e.jsx(De,{className:"-mb-3 h-[16vw] max-h-[320px] min-h-[180px] w-full",color:b["total-subscribers"].color,data:f,id:"mrr",range:u}),(n==="avg-open-rate"&&S||n==="avg-click-rate"&&v)&&e.jsx(e.Fragment,{children:t?e.jsx("div",{className:"h-[320px] w-full items-center justify-center",children:e.jsx(ee,{})}):s&&s.length>0?e.jsxs(e.Fragment,{children:[e.jsx(ye,{className:"aspect-auto h-[200px] w-full md:h-[220px] xl:h-[320px]",config:C,children:e.jsxs(Oe,{className:p?"!cursor-pointer":"",data:s,margin:{top:20},onClick:o=>{o.activePayload&&o.activePayload[0].payload.post_id&&w(`/posts/analytics/${o.activePayload[0].payload.post_id}`,{crossApp:!0})},onMouseLeave:()=>j(!1),onMouseMove:o=>{j(!!(o.activePayload&&o.activePayload[0].payload.post_id))},children:[e.jsx("defs",{children:e.jsxs("linearGradient",{id:"barGradient",x1:"0",x2:"0",y1:"0",y2:"1",children:[e.jsx("stop",{offset:"0%",stopColor:b[n].color,stopOpacity:.8}),e.jsx("stop",{offset:"100%",stopColor:b[n].color,stopOpacity:.6})]})}),e.jsx(Me,{horizontal:!0,stroke:"hsl(var(--border))",vertical:!1}),e.jsx(Le,{axisLine:{stroke:"hsl(var(--border))",strokeWidth:1},dataKey:"post_id",interval:0,stroke:"hsl(var(--border))",tickFormatter:()=>"",tickLine:!1,tickMargin:10}),e.jsx(Re,{axisLine:!1,domain:T,tickFormatter:o=>y(o),tickLine:!1,ticks:E,width:fe(E,o=>y(o))}),e.jsx(_e,{content:e.jsx(st,{}),cursor:!1,isAnimationActive:!1,position:{y:10}}),ue&&e.jsx(Ce,{label:{value:`${y(q)}`,position:"left",offset:8,fill:"hsl(var(--muted-foreground))"},opacity:.5,stroke:"hsl(var(--muted-foreground))",strokeDasharray:"4 4",y:q}),e.jsx(Te,{activeBar:{fillOpacity:1},dataKey:b[n].datakey,fill:"url(#barGradient)",fillOpacity:.6,isAnimationActive:!1,maxBarSize:32,minPointSize:3,radius:4})]})}),e.jsxs("div",{className:"-mt-4 text-center text-sm text-muted-foreground",children:["Newsletters ",n==="avg-open-rate"?"opens":"clicks"," in this period"]})]}):e.jsx(re,{className:"size-full py-20",title:`No newsletters ${J(u)}`,children:e.jsx(ne,{strokeWidth:1.5})})})]})]})},rt=({newsletters:a})=>{const{selectedNewsletterId:s,setSelectedNewsletterId:r}=G(),l=c.useMemo(()=>a?.filter(t=>t.status==="active")||[],[a]);return c.useEffect(()=>{if(l.length>0&&!s){const t=l.find(i=>i.sort_order===0);r(t?t.id:l[0].id)}},[l,s,r]),l.length<=1?null:e.jsxs(Ae,{value:s||"",onValueChange:t=>{r(t)},children:[e.jsxs(Ve,{className:"w-auto",children:[e.jsx(Ke,{className:"mr-2",size:16,strokeWidth:1.5}),e.jsx(ze,{placeholder:"Select a newsletter"})]}),e.jsx(He,{align:"end",children:e.jsxs(We,{children:[e.jsx($e,{children:"Newsletters"}),l.map(t=>e.jsx(Ge,{value:t.id,children:t.name},t.id))]})})]})},nt=(a,s,r=!0)=>{const l=a??30,{startDate:t,endDate:i}=c.useMemo(()=>Q(l),[l]),n=c.useMemo(()=>{const p={date_from:$(t),date_to:$(i)};return s&&(p.newsletter_id=s),p},[t,i,s]),h=Ze({searchParams:n,enabled:r});return r?h:{data:void 0,isLoading:!1,error:null,isError:!1,refetch:h.refetch}},lt=(a,s,r,l=!0)=>{const t=a??30,i=s??"date desc",{startDate:n,endDate:h}=c.useMemo(()=>Q(t),[t]),p=c.useMemo(()=>{const u={date_from:$(n),date_to:$(h),order:i};return r&&(u.newsletter_id=r),u},[n,h,i,r]),j=et({searchParams:p,enabled:l});return l?j:{data:void 0,isLoading:!1,error:null,isError:!1,refetch:j.refetch}},it=(a,s=[],r=!0)=>{const l=c.useMemo(()=>{const i={};return a&&(i.newsletter_id=a),s.length>0&&(i.post_ids=s.join(",")),i},[a,s]),t=tt({searchParams:l,enabled:r});return r?t:{data:void 0,isLoading:!1,error:null,isError:!1,refetch:t.refetch}},oe=(a,s,r,l=!0)=>{const t=lt(a,s,r,l),i=c.useMemo(()=>t.data?.stats?t.data.stats.map(p=>p.post_id):[],[t.data]),n=it(r,i,l&&i.length>0);return{data:c.useMemo(()=>{if(!t.data?.stats)return;const p=t.data.stats,j=n.data?.stats||[],u=new Map;j.forEach(g=>{u.set(g.post_id,g)});const w=p.map(g=>{const N=u.get(g.post_id);return{...g,total_clicks:N?.total_clicks||0,click_rate:N?.click_rate||0}});return{...t.data,stats:w}},[t.data,n.data]),isLoading:t.isLoading,isClicksLoading:n.isLoading,error:t.error||n.error,isError:t.isError||n.isError,refetch:()=>{t.refetch(),n.refetch()}}},ce=U.memo(({range:a,selectedNewsletterId:s,shouldFetchStats:r,sortBy:l})=>{const t=te(),{settings:i}=G(),n=String(i.find(m=>m.key==="timezone")?.value||"Etc/UTC"),{data:h,isLoading:p,isClicksLoading:j}=oe(a,l,s||void 0,!!r),{appSettings:u}=K(),{emailTrackClicks:w,emailTrackOpens:g}=u?.analytics||{},N=c.useMemo(()=>h?.stats||[],[h]),v=g&&w?5:g||w?4:3,S=c.useMemo(()=>e.jsx(e.Fragment,{children:e.jsx(W,{className:"last:border-none [&>td]:py-2.5",children:e.jsx(L,{className:"font-medium",colSpan:v,children:e.jsx(be,{className:"mt-5"})})})}),[v]),R=c.useMemo(()=>N.length>0?e.jsx(e.Fragment,{children:N.map(m=>e.jsxs(W,{className:"last:border-none [&>td]:py-2.5",children:[e.jsx(L,{className:"font-medium",children:e.jsx("div",{className:"group/link inline-flex items-center gap-2",children:m.post_id?e.jsx(je,{className:"h-auto whitespace-normal p-0 text-left hover:!underline",title:"View post analytics",variant:"link",onClick:()=>{t(`/posts/analytics/${m.post_id}/`,{crossApp:!0})},children:m.post_title}):e.jsx(e.Fragment,{children:m.post_title})})}),e.jsx(L,{className:"whitespace-nowrap text-sm",children:ae(m.send_date,n)}),e.jsx(L,{className:"text-right font-mono text-sm",children:D(m.sent_to)}),g&&e.jsxs(L,{className:"text-right font-mono text-sm",children:[e.jsx("span",{className:"group-hover:hidden",children:y(m.open_rate)}),e.jsx("span",{className:"hidden group-hover:!visible group-hover:!block",children:D(m.total_opens)})]}),w&&e.jsx(L,{className:"text-right font-mono text-sm",children:j?e.jsx("span",{className:"inline-block h-4 w-8 animate-pulse rounded bg-gray-200"}):e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"group-hover:hidden",children:y(m.click_rate)}),e.jsx("span",{className:"hidden group-hover:!visible group-hover:!block",children:D(m.total_clicks)})]})})]},m.post_id))}):e.jsx(W,{className:"border-none hover:bg-transparent",children:e.jsx(L,{className:"text-center group-hover:!bg-transparent",colSpan:5,children:e.jsx(re,{className:"size-full py-20",title:`No newsletters ${J(a)}`,children:e.jsx(ne,{strokeWidth:1.5})})})}),[N,j,t,w,g,a]);return p||!h?S:R});ce.displayName="NewsletterTableRows";const de=U.memo(({sortBy:a,setSortBy:s,range:r})=>{const l=c.useMemo(()=>e.jsxs(Ie,{children:[e.jsx(Ye,{children:"Top newsletters"}),e.jsxs(Xe,{children:[" Your best performing newsletters ",J(r)]})]}),[r]),{appSettings:t}=K(),{emailTrackClicks:i,emailTrackOpens:n}=t?.analytics||{};return e.jsx(Je,{children:e.jsxs(W,{children:[e.jsx(O,{className:"min-w-[320px]",variant:"cardhead",children:l}),e.jsx(O,{className:"w-[65px]",children:e.jsx(H,{activeSortBy:a,setSortBy:s,sortBy:"date desc",children:"Date"})}),e.jsx(O,{className:"w-[90px] text-right",children:e.jsx(H,{activeSortBy:a,setSortBy:s,sortBy:"sent_to desc",children:"Sent"})}),n&&e.jsx(O,{className:"w-[90px] text-right",children:e.jsx(H,{activeSortBy:a,setSortBy:s,sortBy:"open_rate desc",children:"Opens"})}),i&&e.jsx(O,{className:"w-[90px] text-right",children:e.jsx(H,{activeSortBy:a,setSortBy:s,sortBy:"click_rate desc",children:"Clicks"})})]})})});de.displayName="NewsletterTableHeader";const me=U.memo(({range:a,selectedNewsletterId:s,shouldFetchStats:r})=>{const[l,t]=c.useState("open_rate desc");return e.jsx(le,{className:"w-full max-w-[calc(100vw-64px)] overflow-x-auto sidebar:max-w-[calc(100vw-64px-280px)]","data-testid":"top-newsletters-card",children:e.jsx(ie,{children:e.jsxs(Qe,{children:[e.jsx(de,{range:a,setSortBy:t,sortBy:l}),e.jsx(Ue,{children:e.jsx(ce,{range:a,selectedNewsletterId:s,shouldFetchStats:r,sortBy:l})})]})})})});me.displayName="TopNewslettersTable";const zt=()=>{const{range:a,selectedNewsletterId:s}=G(),[r]=se(),{appSettings:l}=K(),t=r.get("tab")||"total-subscribers",{data:i,isLoading:n}=qe({searchParams:{limit:"50"}}),h=!n&&i&&i.newsletters.length>0&&!!s,{data:p,isLoading:j}=nt(a,s||void 0,h||!1),{data:u,isLoading:w,isClicksLoading:g}=oe(a,"date asc",s||void 0,h||!1),N=c.useMemo(()=>!i?.newsletters||!s?null:i.newsletters.find(d=>d.id===s)||null,[i,s]),v=c.useMemo(()=>{const d=N?.count?.active_members||p?.stats?.[0]?.total||0;let f=0,_=0;if(u?.stats&&u.stats.length>0){const x=u.stats,C=x.reduce((T,E)=>T+(E.open_rate||0),0),b=x.reduce((T,E)=>T+(E.click_rate||0),0);f=C/x.length,_=b/x.length}return{totalSubscribers:d,avgOpenRate:f,avgClickRate:_}},[N,p,u]),S=c.useMemo(()=>{if(!p?.stats?.[0]?.values||p.stats[0].values.length===0){const{startDate:f,endDate:_}=Q(a),x=[],C=new Date(f);for(;C<=_;)x.push({date:C.toISOString().split("T")[0],value:0}),C.setDate(C.getDate()+1);return x}const d=p.stats[0].values;if(d.length===1){const f=d[0],_=new Date,x=a,C=new Date(_.getTime()-x*24*60*60*1e3);return[{...f,date:C.toISOString().split("T")[0]},{...f,date:_.toISOString().split("T")[0]}]}return d},[p,a]),R=c.useMemo(()=>u?.stats?u.stats.map(d=>({post_id:d.post_id,post_title:d.post_title,send_date:d.send_date,sent_to:d.sent_to,total_opens:d.total_opens,open_rate:d.open_rate,total_clicks:d.total_clicks||0,click_rate:d.click_rate||0})):[],[u]),m=j||g||w;return l&&!l.newslettersEnabled?e.jsx(ge,{to:"/analytics"}):e.jsxs(ke,{children:[e.jsx(we,{children:e.jsxs(Fe,{children:[e.jsx(rt,{newsletters:i?.newsletters}),e.jsx(Ne,{})]})}),e.jsx(Se,{isLoading:!1,loadingComponent:e.jsx(e.Fragment,{}),children:e.jsxs(e.Fragment,{children:[e.jsx(le,{"data-testid":"newsletters-card",children:e.jsx(ie,{children:e.jsx(at,{avgsData:R,initialTab:t,isAvgsLoading:!1,isLoading:m,subscribersData:S,totals:v})})}),e.jsx(me,{range:a,selectedNewsletterId:s,shouldFetchStats:!!h})]})})]})};export{zt as default};
1
+ import{r as c,bV as G,aP as te,bD as se,bW as H,aj as D,j as e,aQ as ee,ai as y,bE as pe,ap as he,bF as xe,bG as Y,bX as fe,bO as ae,af as Q,ag as F,bY as ge,e as U,bB as be,B as je}from"./index-DCTdAEHx.js";import{s as ve,g as q,S as ke,a as we,D as Ne,b as Se}from"./stats-view-BJVawuIv.js";import{C as ye,a as _e,R as Ce,B as Te}from"./chart--RFLGIL4.js";import{E as re}from"./empty-indicator-C6BBh99D.js";import{G as De,C as Me,X as Le,Y as Re}from"./gh-chart-D9KI0_sO.js";import{T as Be,a as Ee,K as X,d as E,e as Oe}from"./tabs-CBD0hW8V.js";import{B as Pe,S as W}from"./sort-button-DFr8vezl.js";import{M as ne}from"./wallet-cards-ddLuIN-b.js";import{S as Ae,a as Ve,b as ze,c as We,d as $e,e as Fe,f as Ge}from"./select-WwMsbBbg.js";import{M as He}from"./lucide-react-DtMIZssr.js";import{j as Ke,C as le,c as ie,a as Ie,b as Ye,f as Xe}from"./pagemenu-Cd45frnF.js";import{a as Qe,e as Ue,b as qe,c as $,d as P,f as L}from"./table-2waWpIF5.js";import{u as Je}from"./newsletters-BB4e24i1.js";import{e as Ze,f as et,g as tt}from"./stats-lnFiOQZx.js";import"./message-square-text-BDZtUW-2.js";import"./sprout-DRqlFJSK.js";import"./_baseAssignValue-Bwn07Ln5.js";import"./index-LyfDjTto.js";import"./a-large-small-p58xibEK.js";import"./at-sign-BZPuAx5m.js";import"./copy-Bi7VpgPR.js";import"./hash-DFhnGHId.js";import"./inbox-p-Y5uScT.js";import"./list-filter-3EF6cVg-.js";import"./minus-CSphShdJ.js";import"./tags-CKrBptuC.js";import"./square-CwHQ9sJ2.js";import"./user-round-check-zOuzV3OS.js";import"./repeat-Smml9n0k.js";import"./reply-CooY4lmk.js";import"./trash-CJY1Wro_.js";const st=({active:a,payload:s})=>{if(!a||!s?.length)return null;const r=s[0].payload,l=r.send_date;return e.jsxs("div",{className:"min-w-[220px] max-w-[240px] rounded-lg border bg-background px-3 py-2 shadow-lg",children:[e.jsxs("div",{className:"mb-2 flex w-full flex-col border-b pb-2",children:[e.jsx("span",{className:"text-sm font-semibold leading-tight",children:r.post_title}),e.jsxs("span",{className:"text-sm text-muted-foreground",children:["Sent on ",ae(l)]})]}),e.jsxs("div",{className:"mb-1 flex w-full justify-between",children:[e.jsx("span",{className:"font-medium text-muted-foreground",children:"Sent"}),e.jsx("div",{className:"ml-2 w-full text-right font-mono",children:D(r.sent_to)})]}),e.jsxs("div",{className:"mb-1 flex w-full justify-between",children:[e.jsx("span",{className:"font-medium text-muted-foreground",children:"Opens"}),e.jsxs("div",{className:"ml-2 w-full text-right font-mono",children:[e.jsxs("span",{className:"text-muted-foreground",children:[D(r.total_opens)," / "]}),y(r.open_rate)]})]}),e.jsxs("div",{className:"mb-1 flex w-full justify-between",children:[e.jsx("span",{className:"font-medium text-muted-foreground",children:"Clicks"}),e.jsxs("div",{className:"ml-2 w-full text-right font-mono",children:[e.jsxs("span",{className:"text-muted-foreground",children:[D(r.total_clicks)," / "]}),y(r.click_rate)]})]})]})},at=({subscribersData:a,avgsData:s,totals:r,isLoading:l,isAvgsLoading:t,initialTab:i="total-subscribers"})=>{const[n,h]=c.useState(i),[p,j]=c.useState(!1),{range:u}=G(),w=te(),[g]=se(),{appSettings:N}=H(),{emailTrackClicks:v,emailTrackOpens:S}=N?.analytics||{},{totalSubscribers:R,avgOpenRate:m,avgClickRate:d}=r,f=c.useMemo(()=>{if(!a||a.length===0)return[];let o=[];return o=ve(a,u,"value","exact"),o.map(M=>({...M,formattedValue:D(M.value),label:"Total Subscribers"}))},[a,u]),_=c.useMemo(()=>{if(!f||f.length<=1)return{direction:"same",value:"0%"};const o=f[0]?.value??0,k=f[f.length-1]?.value??0;let M="same";k>o?M="up":k<o&&(M="down");let O;if(o===0)O=k===0?"0%":"+100%";else{const A=(k-o)/o*100,V=Math.round(A*10)/10;O=`${A>=0?"+":""}${V}%`}return{direction:M,value:O}},[f]);c.useEffect(()=>{h(i)},[i]);const x=o=>{h(o);const k=new URLSearchParams(g);k.set("tab",o),w(`?${k.toString()}`,{replace:!0})},C={open_rate:{label:"Open rate"}},b=c.useMemo(()=>({"total-subscribers":{color:"hsl(var(--chart-darkblue))",datakey:"value"},"avg-open-rate":{color:"hsl(var(--chart-blue))",datakey:"open_rate"},"avg-click-rate":{color:"hsl(var(--chart-teal))",datakey:"click_rate"}}),[]),{barDomain:T,barTicks:B}=c.useMemo(()=>{if(!s||s.length===0||n==="total-subscribers")return{barDomain:[0,1],barTicks:[0,1]};const o=b[n]?.datakey;if(!o)return{barDomain:[0,1],barTicks:[0,1]};const k=s.map(I=>I[o]).filter(I=>typeof I=="number");if(k.length===0)return{barDomain:[0,1],barTicks:[0,1]};const M=Math.min(...k),O=Math.max(...k),A=Math.floor(M*10)/10,V=Math.ceil(O*10)/10,z=Math.max(0,A),Z=V===z?z+.1:V;return{barDomain:[z,Z],barTicks:[z,Z]}},[s,n,b]);if(l)return e.jsx("div",{className:"-mb-6 flex h-[calc(16vw+132px)] w-full items-start justify-center",children:e.jsx(ee,{})});let K="grid-cols-3";(!v||!S)&&(K="grid-cols-2"),!v&&!S&&(K="grid-cols-1");const ue=n==="avg-open-rate"&&m>T[0]&&m<T[1]||n==="avg-click-rate"&&d>T[0]&&d<T[1],J=n==="avg-open-rate"?m:d;return e.jsxs(Be,{defaultValue:i,variant:"kpis",children:[e.jsxs(Ee,{className:`-mx-6 hidden grid-cols-3 md:!visible md:!grid ${K}`,children:[e.jsx(X,{className:`${!S&&!v&&"cursor-auto after:hidden"}`,value:"total-subscribers",onClick:()=>{x("total-subscribers")},children:e.jsx(E,{color:b["total-subscribers"].color,"data-testid":"total-subscribers-value",diffDirection:_.direction,diffValue:_.value,label:"Total subscribers",value:D(R)})}),S&&e.jsx(X,{value:"avg-open-rate",onClick:()=>{x("avg-open-rate")},children:e.jsx(E,{className:t?"opacity-50":"",color:b["avg-open-rate"].color,label:"Avg. open rate",value:y(m)})}),v&&e.jsx(X,{value:"avg-click-rate",onClick:()=>{x("avg-click-rate")},children:e.jsx(E,{className:t?"opacity-50":"",color:b["avg-click-rate"].color,label:"Avg. click rate",value:y(d)})})]}),e.jsxs(pe,{children:[e.jsx(he,{className:"md:hidden",asChild:!0,children:e.jsxs(Oe,{children:[n==="total-subscribers"&&e.jsx(E,{color:b["total-subscribers"].color,label:"Total subscribers",value:D(R)}),n==="avg-open-rate"&&S&&e.jsx(E,{className:t?"opacity-50":"",color:b["avg-open-rate"].color,label:"Avg. open rate",value:y(m)}),n==="avg-click-rate"&&v&&e.jsx(E,{className:t?"opacity-50":"",color:b["avg-click-rate"].color,label:"Avg. click rate",value:y(d)})]})}),e.jsxs(xe,{align:"end",className:"w-56",children:[e.jsx(Y,{onClick:()=>x("total-subscribers"),children:"Total subscribers"}),S&&e.jsx(Y,{onClick:()=>x("avg-open-rate"),children:"Avg. open rate"}),v&&e.jsx(Y,{onClick:()=>x("avg-click-rate"),children:"Avg. click rate"})]})]}),e.jsxs("div",{className:"my-4 [&_.recharts-cartesian-axis-tick-value]:fill-gray-500",children:[n==="total-subscribers"&&e.jsx(De,{className:"-mb-3 h-[16vw] max-h-[320px] min-h-[180px] w-full",color:b["total-subscribers"].color,data:f,id:"mrr",range:u}),(n==="avg-open-rate"&&S||n==="avg-click-rate"&&v)&&e.jsx(e.Fragment,{children:t?e.jsx("div",{className:"h-[320px] w-full items-center justify-center",children:e.jsx(ee,{})}):s&&s.length>0?e.jsxs(e.Fragment,{children:[e.jsx(ye,{className:"aspect-auto h-[200px] w-full md:h-[220px] xl:h-[320px]",config:C,children:e.jsxs(Pe,{className:p?"!cursor-pointer":"",data:s,margin:{top:20},onClick:o=>{o.activePayload&&o.activePayload[0].payload.post_id&&w(`/posts/analytics/${o.activePayload[0].payload.post_id}`,{crossApp:!0})},onMouseLeave:()=>j(!1),onMouseMove:o=>{j(!!(o.activePayload&&o.activePayload[0].payload.post_id))},children:[e.jsx("defs",{children:e.jsxs("linearGradient",{id:"barGradient",x1:"0",x2:"0",y1:"0",y2:"1",children:[e.jsx("stop",{offset:"0%",stopColor:b[n].color,stopOpacity:.8}),e.jsx("stop",{offset:"100%",stopColor:b[n].color,stopOpacity:.6})]})}),e.jsx(Me,{horizontal:!0,stroke:"hsl(var(--border))",vertical:!1}),e.jsx(Le,{axisLine:{stroke:"hsl(var(--border))",strokeWidth:1},dataKey:"post_id",interval:0,stroke:"hsl(var(--border))",tickFormatter:()=>"",tickLine:!1,tickMargin:10}),e.jsx(Re,{axisLine:!1,domain:T,tickFormatter:o=>y(o),tickLine:!1,ticks:B,width:fe(B,o=>y(o))}),e.jsx(_e,{content:e.jsx(st,{}),cursor:!1,isAnimationActive:!1,position:{y:10}}),ue&&e.jsx(Ce,{label:{value:`${y(J)}`,position:"left",offset:8,fill:"hsl(var(--muted-foreground))"},opacity:.5,stroke:"hsl(var(--muted-foreground))",strokeDasharray:"4 4",y:J}),e.jsx(Te,{activeBar:{fillOpacity:1},dataKey:b[n].datakey,fill:"url(#barGradient)",fillOpacity:.6,isAnimationActive:!1,maxBarSize:32,minPointSize:3,radius:4})]})}),e.jsxs("div",{className:"-mt-4 text-center text-sm text-muted-foreground",children:["Newsletters ",n==="avg-open-rate"?"opens":"clicks"," in this period"]})]}):e.jsx(re,{className:"size-full py-20",title:`No newsletters ${q(u)}`,children:e.jsx(ne,{strokeWidth:1.5})})})]})]})},rt=({newsletters:a})=>{const{selectedNewsletterId:s,setSelectedNewsletterId:r}=G(),l=c.useMemo(()=>a?.filter(t=>t.status==="active")||[],[a]);return c.useEffect(()=>{if(l.length>0&&!s){const t=l.find(i=>i.sort_order===0);r(t?t.id:l[0].id)}},[l,s,r]),l.length<=1?null:e.jsxs(Ae,{value:s||"",onValueChange:t=>{r(t)},children:[e.jsxs(Ve,{className:"w-auto",children:[e.jsx(He,{className:"mr-2",size:16,strokeWidth:1.5}),e.jsx(ze,{placeholder:"Select a newsletter"})]}),e.jsx(We,{align:"end",children:e.jsxs($e,{children:[e.jsx(Fe,{children:"Newsletters"}),l.map(t=>e.jsx(Ge,{value:t.id,children:t.name},t.id))]})})]})},nt=(a,s,r=!0)=>{const l=a??30,{startDate:t,endDate:i}=c.useMemo(()=>Q(l),[l]),n=c.useMemo(()=>{const p={date_from:F(t),date_to:F(i)};return s&&(p.newsletter_id=s),p},[t,i,s]),h=Ze({searchParams:n,enabled:r});return r?h:{data:void 0,isLoading:!1,error:null,isError:!1,refetch:h.refetch}},lt=(a,s,r,l=!0)=>{const t=a??30,i=s??"date desc",{startDate:n,endDate:h}=c.useMemo(()=>Q(t),[t]),p=c.useMemo(()=>{const u={date_from:F(n),date_to:F(h),order:i};return r&&(u.newsletter_id=r),u},[n,h,i,r]),j=et({searchParams:p,enabled:l});return l?j:{data:void 0,isLoading:!1,error:null,isError:!1,refetch:j.refetch}},it=(a,s=[],r=!0)=>{const l=c.useMemo(()=>{const i={};return a&&(i.newsletter_id=a),s.length>0&&(i.post_ids=s.join(",")),i},[a,s]),t=tt({searchParams:l,enabled:r});return r?t:{data:void 0,isLoading:!1,error:null,isError:!1,refetch:t.refetch}},oe=(a,s,r,l=!0)=>{const t=lt(a,s,r,l),i=c.useMemo(()=>t.data?.stats?t.data.stats.map(p=>p.post_id):[],[t.data]),n=it(r,i,l&&i.length>0);return{data:c.useMemo(()=>{if(!t.data?.stats)return;const p=t.data.stats,j=n.data?.stats||[],u=new Map;j.forEach(g=>{u.set(g.post_id,g)});const w=p.map(g=>{const N=u.get(g.post_id);return{...g,total_clicks:N?.total_clicks||0,click_rate:N?.click_rate||0}});return{...t.data,stats:w}},[t.data,n.data]),isLoading:t.isLoading,isClicksLoading:n.isLoading,error:t.error||n.error,isError:t.isError||n.isError,refetch:()=>{t.refetch(),n.refetch()}}},ce=U.memo(({range:a,selectedNewsletterId:s,shouldFetchStats:r,sortBy:l})=>{const t=te(),{settings:i}=G(),n=String(i.find(m=>m.key==="timezone")?.value||"Etc/UTC"),{data:h,isLoading:p,isClicksLoading:j}=oe(a,l,s||void 0,!!r),{appSettings:u}=H(),{emailTrackClicks:w,emailTrackOpens:g}=u?.analytics||{},N=c.useMemo(()=>h?.stats||[],[h]),v=g&&w?5:g||w?4:3,S=c.useMemo(()=>e.jsx(e.Fragment,{children:e.jsx($,{className:"last:border-none [&>td]:py-2.5",children:e.jsx(L,{className:"font-medium",colSpan:v,children:e.jsx(be,{className:"mt-5"})})})}),[v]),R=c.useMemo(()=>N.length>0?e.jsx(e.Fragment,{children:N.map(m=>e.jsxs($,{className:"last:border-none [&>td]:py-2.5",children:[e.jsx(L,{className:"font-medium",children:e.jsx("div",{className:"group/link inline-flex items-center gap-2",children:m.post_id?e.jsx(je,{className:"h-auto whitespace-normal p-0 text-left hover:!underline",title:"View post analytics",variant:"link",onClick:()=>{t(`/posts/analytics/${m.post_id}/`,{crossApp:!0})},children:m.post_title}):e.jsx(e.Fragment,{children:m.post_title})})}),e.jsx(L,{className:"whitespace-nowrap text-sm",children:ae(m.send_date,n)}),e.jsx(L,{className:"text-right font-mono text-sm",children:D(m.sent_to)}),g&&e.jsxs(L,{className:"text-right font-mono text-sm",children:[e.jsx("span",{className:"group-hover:hidden",children:y(m.open_rate)}),e.jsx("span",{className:"hidden group-hover:!visible group-hover:!block",children:D(m.total_opens)})]}),w&&e.jsx(L,{className:"text-right font-mono text-sm",children:j?e.jsx("span",{className:"inline-block h-4 w-8 animate-pulse rounded bg-gray-200"}):e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"group-hover:hidden",children:y(m.click_rate)}),e.jsx("span",{className:"hidden group-hover:!visible group-hover:!block",children:D(m.total_clicks)})]})})]},m.post_id))}):e.jsx($,{className:"border-none hover:bg-transparent",children:e.jsx(L,{className:"text-center group-hover:!bg-transparent",colSpan:5,children:e.jsx(re,{className:"size-full py-20",title:`No newsletters ${q(a)}`,children:e.jsx(ne,{strokeWidth:1.5})})})}),[N,j,t,w,g,a]);return p||!h?S:R});ce.displayName="NewsletterTableRows";const de=U.memo(({sortBy:a,setSortBy:s,range:r})=>{const l=c.useMemo(()=>e.jsxs(Ie,{children:[e.jsx(Ye,{children:"Top newsletters"}),e.jsxs(Xe,{children:[" Your best performing newsletters ",q(r)]})]}),[r]),{appSettings:t}=H(),{emailTrackClicks:i,emailTrackOpens:n}=t?.analytics||{};return e.jsx(qe,{children:e.jsxs($,{children:[e.jsx(P,{className:"min-w-[320px]",variant:"cardhead",children:l}),e.jsx(P,{className:"w-[65px]",children:e.jsx(W,{activeSortBy:a,setSortBy:s,sortBy:"date desc",children:"Date"})}),e.jsx(P,{className:"w-[90px] text-right",children:e.jsx(W,{activeSortBy:a,setSortBy:s,sortBy:"sent_to desc",children:"Sent"})}),n&&e.jsx(P,{className:"w-[90px] text-right",children:e.jsx(W,{activeSortBy:a,setSortBy:s,sortBy:"open_rate desc",children:"Opens"})}),i&&e.jsx(P,{className:"w-[90px] text-right",children:e.jsx(W,{activeSortBy:a,setSortBy:s,sortBy:"click_rate desc",children:"Clicks"})})]})})});de.displayName="NewsletterTableHeader";const me=U.memo(({range:a,selectedNewsletterId:s,shouldFetchStats:r})=>{const[l,t]=c.useState("open_rate desc");return e.jsx(le,{className:"w-full max-w-[calc(100vw-64px)] overflow-x-auto sidebar:max-w-[calc(100vw-64px-280px)]","data-testid":"top-newsletters-card",children:e.jsx(ie,{children:e.jsxs(Qe,{children:[e.jsx(de,{range:a,setSortBy:t,sortBy:l}),e.jsx(Ue,{children:e.jsx(ce,{range:a,selectedNewsletterId:s,shouldFetchStats:r,sortBy:l})})]})})})});me.displayName="TopNewslettersTable";const zt=()=>{const{range:a,selectedNewsletterId:s}=G(),[r]=se(),{appSettings:l}=H(),t=r.get("tab")||"total-subscribers",{data:i,isLoading:n}=Je({searchParams:{limit:"50"}}),h=!n&&i&&i.newsletters.length>0&&!!s,{data:p,isLoading:j}=nt(a,s||void 0,h||!1),{data:u,isLoading:w,isClicksLoading:g}=oe(a,"date asc",s||void 0,h||!1),N=c.useMemo(()=>!i?.newsletters||!s?null:i.newsletters.find(d=>d.id===s)||null,[i,s]),v=c.useMemo(()=>{const d=N?.count?.active_members||p?.stats?.[0]?.total||0;let f=0,_=0;if(u?.stats&&u.stats.length>0){const x=u.stats,C=x.reduce((T,B)=>T+(B.open_rate||0),0),b=x.reduce((T,B)=>T+(B.click_rate||0),0);f=C/x.length,_=b/x.length}return{totalSubscribers:d,avgOpenRate:f,avgClickRate:_}},[N,p,u]),S=c.useMemo(()=>{if(!p?.stats?.[0]?.values||p.stats[0].values.length===0){const{startDate:f,endDate:_}=Q(a),x=[],C=new Date(f);for(;C<=_;)x.push({date:C.toISOString().split("T")[0],value:0}),C.setDate(C.getDate()+1);return x}const d=p.stats[0].values;if(d.length===1){const f=d[0],_=new Date,x=a,C=new Date(_.getTime()-x*24*60*60*1e3);return[{...f,date:C.toISOString().split("T")[0]},{...f,date:_.toISOString().split("T")[0]}]}return d},[p,a]),R=c.useMemo(()=>u?.stats?u.stats.map(d=>({post_id:d.post_id,post_title:d.post_title,send_date:d.send_date,sent_to:d.sent_to,total_opens:d.total_opens,open_rate:d.open_rate,total_clicks:d.total_clicks||0,click_rate:d.click_rate||0})):[],[u]),m=j||g||w;return l&&!l.newslettersEnabled?e.jsx(ge,{to:"/analytics"}):e.jsxs(ke,{children:[e.jsx(we,{children:e.jsxs(Ke,{children:[e.jsx(rt,{newsletters:i?.newsletters}),e.jsx(Ne,{})]})}),e.jsx(Se,{isLoading:!1,loadingComponent:e.jsx(e.Fragment,{}),children:e.jsxs(e.Fragment,{children:[e.jsx(le,{"data-testid":"newsletters-card",children:e.jsx(ie,{children:e.jsx(at,{avgsData:R,initialTab:t,isAvgsLoading:!1,isLoading:m,subscribersData:S,totals:v})})}),e.jsx(me,{range:a,selectedNewsletterId:s,shouldFetchStats:!!h})]})})]})};export{zt as default};
@@ -1 +1 @@
1
- import{r as a,j as u,as as D,az as L,au as I,ar as O,aE as S,ay as j,aF as z,aG as G}from"./index-B8G0f0hb.js";var R="Checkbox",[H]=D(R),[K,P]=H(R);function U(t){const{__scopeCheckbox:c,checked:s,children:l,defaultChecked:r,disabled:e,form:f,name:h,onCheckedChange:d,required:C,value:k="on",internal_do_not_use_render:i}=t,[p,v]=O({prop:s,defaultProp:r??!1,onChange:d,caller:R}),[x,m]=a.useState(null),[E,o]=a.useState(null),n=a.useRef(!1),_=x?!!f||!!x.closest("form"):!0,y={checked:p,disabled:e,setChecked:v,control:x,setControl:m,name:h,form:f,value:k,hasConsumerStoppedPropagationRef:n,required:C,defaultChecked:b(r)?!1:r,isFormControl:_,bubbleInput:E,setBubbleInput:o};return u.jsx(K,{scope:c,...y,children:Q(i)?i(y):l})}var N="CheckboxTrigger",w=a.forwardRef(({__scopeCheckbox:t,onKeyDown:c,onClick:s,...l},r)=>{const{control:e,value:f,disabled:h,checked:d,required:C,setControl:k,setChecked:i,hasConsumerStoppedPropagationRef:p,isFormControl:v,bubbleInput:x}=P(N,t),m=S(r,k),E=a.useRef(d);return a.useEffect(()=>{const o=e?.form;if(o){const n=()=>i(E.current);return o.addEventListener("reset",n),()=>o.removeEventListener("reset",n)}},[e,i]),u.jsx(I.button,{type:"button",role:"checkbox","aria-checked":b(d)?"mixed":d,"aria-required":C,"data-state":q(d),"data-disabled":h?"":void 0,disabled:h,value:f,...l,ref:m,onKeyDown:j(c,o=>{o.key==="Enter"&&o.preventDefault()}),onClick:j(s,o=>{i(n=>b(n)?!0:!n),x&&v&&(p.current=o.isPropagationStopped(),p.current||o.stopPropagation())})})});w.displayName=N;var X=a.forwardRef((t,c)=>{const{__scopeCheckbox:s,name:l,checked:r,defaultChecked:e,required:f,disabled:h,value:d,onCheckedChange:C,form:k,...i}=t;return u.jsx(U,{__scopeCheckbox:s,checked:r,defaultChecked:e,disabled:h,required:f,onCheckedChange:C,name:l,form:k,value:d,internal_do_not_use_render:({isFormControl:p})=>u.jsxs(u.Fragment,{children:[u.jsx(w,{...i,ref:c,__scopeCheckbox:s}),p&&u.jsx(T,{__scopeCheckbox:s})]})})});X.displayName=R;var B="CheckboxIndicator",J=a.forwardRef((t,c)=>{const{__scopeCheckbox:s,forceMount:l,...r}=t,e=P(B,s);return u.jsx(L,{present:l||b(e.checked)||e.checked===!0,children:u.jsx(I.span,{"data-state":q(e.checked),"data-disabled":e.disabled?"":void 0,...r,ref:c,style:{pointerEvents:"none",...t.style}})})});J.displayName=B;var M="CheckboxBubbleInput",T=a.forwardRef(({__scopeCheckbox:t,...c},s)=>{const{control:l,hasConsumerStoppedPropagationRef:r,checked:e,defaultChecked:f,required:h,disabled:d,name:C,value:k,form:i,bubbleInput:p,setBubbleInput:v}=P(M,t),x=S(s,v),m=z(e),E=G(l);a.useEffect(()=>{const n=p;if(!n)return;const _=window.HTMLInputElement.prototype,g=Object.getOwnPropertyDescriptor(_,"checked").set,A=!r.current;if(m!==e&&g){const F=new Event("click",{bubbles:A});n.indeterminate=b(e),g.call(n,b(e)?!1:e),n.dispatchEvent(F)}},[p,m,e,r]);const o=a.useRef(b(e)?!1:e);return u.jsx(I.input,{type:"checkbox","aria-hidden":!0,defaultChecked:f??o.current,required:h,disabled:d,name:C,value:k,form:i,...c,tabIndex:-1,ref:x,style:{...c.style,...E,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})});T.displayName=M;function Q(t){return typeof t=="function"}function b(t){return t==="indeterminate"}function q(t){return b(t)?"indeterminate":t?"checked":"unchecked"}export{X as C,J as a};
1
+ import{r as a,j as u,as as D,az as L,au as I,ar as O,aE as S,ay as j,aF as z,aG as G}from"./index-DCTdAEHx.js";var R="Checkbox",[H]=D(R),[K,P]=H(R);function U(t){const{__scopeCheckbox:c,checked:s,children:l,defaultChecked:r,disabled:e,form:f,name:h,onCheckedChange:d,required:C,value:k="on",internal_do_not_use_render:i}=t,[p,v]=O({prop:s,defaultProp:r??!1,onChange:d,caller:R}),[x,m]=a.useState(null),[E,o]=a.useState(null),n=a.useRef(!1),_=x?!!f||!!x.closest("form"):!0,y={checked:p,disabled:e,setChecked:v,control:x,setControl:m,name:h,form:f,value:k,hasConsumerStoppedPropagationRef:n,required:C,defaultChecked:b(r)?!1:r,isFormControl:_,bubbleInput:E,setBubbleInput:o};return u.jsx(K,{scope:c,...y,children:Q(i)?i(y):l})}var N="CheckboxTrigger",w=a.forwardRef(({__scopeCheckbox:t,onKeyDown:c,onClick:s,...l},r)=>{const{control:e,value:f,disabled:h,checked:d,required:C,setControl:k,setChecked:i,hasConsumerStoppedPropagationRef:p,isFormControl:v,bubbleInput:x}=P(N,t),m=S(r,k),E=a.useRef(d);return a.useEffect(()=>{const o=e?.form;if(o){const n=()=>i(E.current);return o.addEventListener("reset",n),()=>o.removeEventListener("reset",n)}},[e,i]),u.jsx(I.button,{type:"button",role:"checkbox","aria-checked":b(d)?"mixed":d,"aria-required":C,"data-state":q(d),"data-disabled":h?"":void 0,disabled:h,value:f,...l,ref:m,onKeyDown:j(c,o=>{o.key==="Enter"&&o.preventDefault()}),onClick:j(s,o=>{i(n=>b(n)?!0:!n),x&&v&&(p.current=o.isPropagationStopped(),p.current||o.stopPropagation())})})});w.displayName=N;var X=a.forwardRef((t,c)=>{const{__scopeCheckbox:s,name:l,checked:r,defaultChecked:e,required:f,disabled:h,value:d,onCheckedChange:C,form:k,...i}=t;return u.jsx(U,{__scopeCheckbox:s,checked:r,defaultChecked:e,disabled:h,required:f,onCheckedChange:C,name:l,form:k,value:d,internal_do_not_use_render:({isFormControl:p})=>u.jsxs(u.Fragment,{children:[u.jsx(w,{...i,ref:c,__scopeCheckbox:s}),p&&u.jsx(T,{__scopeCheckbox:s})]})})});X.displayName=R;var B="CheckboxIndicator",J=a.forwardRef((t,c)=>{const{__scopeCheckbox:s,forceMount:l,...r}=t,e=P(B,s);return u.jsx(L,{present:l||b(e.checked)||e.checked===!0,children:u.jsx(I.span,{"data-state":q(e.checked),"data-disabled":e.disabled?"":void 0,...r,ref:c,style:{pointerEvents:"none",...t.style}})})});J.displayName=B;var M="CheckboxBubbleInput",T=a.forwardRef(({__scopeCheckbox:t,...c},s)=>{const{control:l,hasConsumerStoppedPropagationRef:r,checked:e,defaultChecked:f,required:h,disabled:d,name:C,value:k,form:i,bubbleInput:p,setBubbleInput:v}=P(M,t),x=S(s,v),m=z(e),E=G(l);a.useEffect(()=>{const n=p;if(!n)return;const _=window.HTMLInputElement.prototype,g=Object.getOwnPropertyDescriptor(_,"checked").set,A=!r.current;if(m!==e&&g){const F=new Event("click",{bubbles:A});n.indeterminate=b(e),g.call(n,b(e)?!1:e),n.dispatchEvent(F)}},[p,m,e,r]);const o=a.useRef(b(e)?!1:e);return u.jsx(I.input,{type:"checkbox","aria-hidden":!0,defaultChecked:f??o.current,required:h,disabled:d,name:C,value:k,form:i,...c,tabIndex:-1,ref:x,style:{...c.style,...E,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})});T.displayName=M;function Q(t){return typeof t=="function"}function b(t){return t==="indeterminate"}function q(t){return b(t)?"indeterminate":t?"checked":"unchecked"}export{X as C,J as a};