ghost 6.24.0 → 6.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/{tryghost-i18n-6.24.0.tgz → tryghost-i18n-6.25.0.tgz} +0 -0
- package/components/tryghost-parse-email-address-6.25.0.tgz +0 -0
- package/core/boot.js +3 -1
- package/core/built/admin/assets/{PolarAngleAxis-7TlIQL3R.js → PolarAngleAxis-BNo3yZOE.js} +1 -1
- package/core/built/admin/assets/{_baseAssignValue-DJsCJz6y.js → _baseAssignValue-DwWJd_kU.js} +1 -1
- package/core/built/admin/assets/{a-large-small-BnBpzYwl.js → a-large-small-DzN0AB7t.js} +1 -1
- package/core/built/admin/assets/{at-sign-DC4NtDDM.js → at-sign-vqoOA4VZ.js} +1 -1
- package/core/built/admin/assets/{audience-CC5U4UxI.js → audience-CFjVlFTu.js} +1 -1
- package/core/built/admin/assets/{avatar-flipboard-_GQfQXQc.js → avatar-flipboard-DuTJ0ty5.js} +1 -1
- package/core/built/admin/assets/{bluesky-sharing-BKyzPl9y.js → bluesky-sharing-C1WkXrRJ.js} +1 -1
- package/core/built/admin/assets/{chart-BCQFlmhJ.js → chart-Bs2L1q8g.js} +1 -1
- package/core/built/admin/assets/{chunk.423.dae9a3bbe7845c3a3cfc.js → chunk.434.de8a15730373eccfeefe.js} +13 -101
- package/core/built/admin/assets/{chunk.524.b5e454aa74df4428420c.js → chunk.524.ed5714f505e821e549f3.js} +5 -5
- package/core/built/admin/assets/{chunk.582.20635869be68725e6d5c.js → chunk.582.639cecaca9e77bd7dd4f.js} +7 -7
- package/core/built/admin/assets/{chunk.123.1255d9e815f933dfdc57.js → chunk.603.5cb992da88800a9388f3.js} +8 -6
- package/core/built/admin/assets/{code-editor-view-BXnjo7qe.js → code-editor-view-DIH4grxv.js} +1 -1
- package/core/built/admin/assets/comments-gAnA10dK.js +1 -0
- package/core/built/admin/assets/{content-helpers-CQXipRWa.js → content-helpers-Cr_DHEOl.js} +1 -1
- package/core/built/admin/assets/{copy-B-MxRWPu.js → copy-w3c9zkaZ.js} +1 -1
- package/core/built/admin/assets/{data-list-B2sqn7IE.js → data-list-D-K_XfF3.js} +1 -1
- package/core/built/admin/assets/{deleted-feed-item-DQi676Dy.js → deleted-feed-item-DK47iaMV.js} +1 -1
- package/core/built/admin/assets/{dropzone-GgOCfK2j.js → dropzone-BHWXAN0m.js} +3 -3
- package/core/built/admin/assets/{edit-profile-COx5FmF9.js → edit-profile-DCyHhZgx.js} +1 -1
- package/core/built/admin/assets/{empty-indicator-Bf4Dqk72.js → empty-indicator-DjmACVr2.js} +1 -1
- package/core/built/admin/assets/{en-BkI47Ou-.js → en-Cl0b7CNW.js} +1 -1
- package/core/built/admin/assets/{feed-Dzc-8jwd.js → feed-C5AauoXf.js} +1 -1
- package/core/built/admin/assets/filters-DzSJ1ez3.js +1 -0
- package/core/built/admin/assets/{gh-chart-Ch6dYUac.js → gh-chart-xjwu2HZo.js} +1 -1
- package/core/built/admin/assets/{ghost-69e448feab2cb78aba64f7177fa4d6f0.js → ghost-78b4a517ac907213ab47708eef33bc6f.js} +423 -542
- package/core/built/admin/assets/{growth-BIBJdcm6.js → growth-DDyypj0q.js} +1 -1
- package/core/built/admin/assets/{hash-BGd7HEsT.js → hash-Bowe71Lt.js} +1 -1
- package/core/built/admin/assets/{inbox-CFzKvW3h.js → inbox-DS4qMjUb.js} +1 -1
- package/core/built/admin/assets/{index-DDJAHYHQ.js → index-4xuWCs9h.js} +1 -1
- package/core/built/admin/assets/{index-DIO8ceib.js → index-6Ag8SK_E.js} +1 -1
- package/core/built/admin/assets/{index-Dy8dCc8t.js → index-A6WmqYr6.js} +4 -4
- package/core/built/admin/assets/index-B8XuCPIT.js +1 -0
- package/core/built/admin/assets/{index-S2DGJkmz.js → index-BCvRITTU.js} +2 -2
- package/core/built/admin/assets/{index-BZyG96u1.js → index-B_XhekWb.js} +1 -1
- package/core/built/admin/assets/{index-D0gRP4Gp.js → index-C8ssgmjI.js} +1 -1
- package/core/built/admin/assets/{index-DM98UB_U.js → index-CFY2MOp4.js} +1 -1
- package/core/built/admin/assets/{index-CvX5YYEz.js → index-CVvW6Q-y.js} +1 -1
- package/core/built/admin/assets/{index-DpZazR71.js → index-CZK1A375.js} +1 -1
- package/core/built/admin/assets/{index-BYXKsmpv.js → index-CfpTfwls.js} +1 -1
- package/core/built/admin/assets/index-Chp0ODAU.css +1 -0
- package/core/built/admin/assets/{index-7NTHsKgE.js → index-DX6vaEVx.js} +1 -1
- package/core/built/admin/assets/{index-CsHjDdYB.js → index-DqlHFtZD.js} +1 -1
- package/core/built/admin/assets/{index-ZuWSQ3L6.js → index-JMWMnGGt.js} +93 -93
- package/core/built/admin/assets/{index-_WMp37yL.js → index-N61Xkr32.js} +1 -1
- package/core/built/admin/assets/{index-n5opb8tL.js → index-SDMWxO5r.js} +1 -1
- package/core/built/admin/assets/{koenig-lexical-8qAZ5o1x.js → koenig-lexical-DL3I-AcK.js} +1 -1
- package/core/built/admin/assets/{kpis-Cv75oSPY.js → kpis-Bm-hIEkf.js} +1 -1
- package/core/built/admin/assets/{label-CofMdj8x.js → label-DBwnwMrX.js} +1 -1
- package/core/built/admin/assets/{links-MSlYSad1.js → links-CnjcW0lg.js} +1 -1
- package/core/built/admin/assets/{loader-circle-CF5G2g_Z.js → loader-circle-CGDGFypO.js} +1 -1
- package/core/built/admin/assets/{lucide-react-DZiAu6PQ.js → lucide-react-BfVLf4Hw.js} +1 -1
- package/core/built/admin/assets/{main-layout-DEVUkqt_.js → main-layout-C_UH037j.js} +1 -1
- package/core/built/admin/assets/{member-route-mLKS-PsA.js → member-route-CKuE9uDU.js} +1 -1
- package/core/built/admin/assets/members-CzztojNk.js +15 -0
- package/core/built/admin/assets/{message-square-text-DESy3kSk.js → message-square-text-BDJyLbG2.js} +1 -1
- package/core/built/admin/assets/{minus-DVNwSjD6.js → minus-BM0xhFIQ.js} +1 -1
- package/core/built/admin/assets/{modals-FYjLOMaQ.js → modals-B6ZySU0x.js} +13 -13
- package/core/built/admin/assets/{moderation-u4WS46a-.js → moderation-CQMIGpv1.js} +1 -1
- package/core/built/admin/assets/{newsletter-Cj0UCg4J.js → newsletter-Dexg7vU8.js} +1 -1
- package/core/built/admin/assets/{newsletters-_UvhdBE3.js → newsletters-CT4k07rm.js} +1 -1
- package/core/built/admin/assets/{note-CRnFryTp.js → note-CiemurXq.js} +1 -1
- package/core/built/admin/assets/{overview-Cr0dGxEU.js → overview-9TwqfzGq.js} +1 -1
- package/core/built/admin/assets/{pagemenu-BqoDENpI.js → pagemenu-Dq744OgH.js} +1 -1
- package/core/built/admin/assets/{post-analytics-DIr_rDtL.js → post-analytics-CcRhLDKA.js} +1 -1
- package/core/built/admin/assets/{post-analytics-context-WA--pwK5.js → post-analytics-context-COgn3d86.js} +1 -1
- package/core/built/admin/assets/{post-analytics-header-D97SoEaV.js → post-analytics-header-DtBp2QSX.js} +1 -1
- package/core/built/admin/assets/{post-share-modal-DBxR7WCX.js → post-share-modal-BlOEKX3-.js} +1 -1
- package/core/built/admin/assets/posts/comments-C4rwkXWy.mjs +1473 -0
- package/core/built/admin/assets/posts/{dialog-67vvNv8e.mjs → dialog-Chkt119L.mjs} +3 -3
- package/core/built/admin/assets/posts/{dropdown-menu-BKZfsAPJ.mjs → dropdown-menu-CvSs_ay2.mjs} +5 -5
- package/core/built/admin/assets/posts/{empty-indicator-DTmBQa_3.mjs → empty-indicator-GyeO28CG.mjs} +2 -2
- package/core/built/admin/assets/posts/filters-BD3A2GlB.mjs +2831 -0
- package/core/built/admin/assets/posts/{get-site-timezone-D75cHSJ1.mjs → get-site-timezone-Baeue4hE.mjs} +2 -2
- package/core/built/admin/assets/posts/{growth-BqJWjpAp.mjs → growth-kmVbKjBt.mjs} +14 -14
- package/core/built/admin/assets/posts/{heading-DXxLDQ96.mjs → heading-DV_WQJh4.mjs} +2 -2
- package/core/built/admin/assets/posts/{hooks-pVotzebr.mjs → hooks-DQhsid0U.mjs} +2 -2
- package/core/built/admin/assets/posts/{index-By5yPnMZ.mjs → index-Bl1ReYmV.mjs} +10 -10
- package/core/built/admin/assets/posts/{index-DZ1HzbGS.mjs → index-CVum5OE6.mjs} +3 -3
- package/core/built/admin/assets/posts/{input-DdXe2Fjm.mjs → input-C7qFEkmt.mjs} +2 -2
- package/core/built/admin/assets/posts/{kpis-1MXZeSC9.mjs → kpis-DteuJY-D.mjs} +10 -10
- package/core/built/admin/assets/posts/{links-DGzzdzsH.mjs → links-eoZr0T0x.mjs} +4 -4
- package/core/built/admin/assets/posts/{loading-indicator-CSj2spwS.mjs → loading-indicator-Dj1SCL40.mjs} +3 -3
- package/core/built/admin/assets/posts/{main-layout-CGs25JVH.mjs → main-layout-Ct-TA0TH.mjs} +2 -2
- package/core/built/admin/assets/posts/{members-BRcED5fL.mjs → members-BY9oPKo4.mjs} +3814 -3378
- package/core/built/admin/assets/posts/{newsletter-D706LlgM.mjs → newsletter-BR1tln6E.mjs} +15 -15
- package/core/built/admin/assets/posts/{overview-5dG5ypjx.mjs → overview-j1ANMAQ2.mjs} +16 -16
- package/core/built/admin/assets/posts/{post-analytics-wvNuOa4c.mjs → post-analytics-DnG-Rolr.mjs} +6 -6
- package/core/built/admin/assets/posts/{post-analytics-context-BqnFe05q.mjs → post-analytics-context-hiKFF4yE.mjs} +5 -5
- package/core/built/admin/assets/posts/{post-analytics-header-Dsi5l6hb.mjs → post-analytics-header-OqAJ8SUL.mjs} +11 -11
- package/core/built/admin/assets/posts/{post-share-modal-DWe35McY.mjs → post-share-modal-BWfujDu2.mjs} +4 -4
- package/core/built/admin/assets/posts/posts-CS9tqSJC.mjs +37 -0
- package/core/built/admin/assets/posts/posts.js +1 -1
- package/core/built/admin/assets/posts/{reply-B4vwBMwj.mjs → reply-CX_EQh9X.mjs} +2 -2
- package/core/built/admin/assets/posts/{search-DQuB1WMm.mjs → search-BqzdnPQb.mjs} +2 -2
- package/core/built/admin/assets/posts/{select-BMPHyOdQ.mjs → select-CD5WLIrZ.mjs} +8 -8
- package/core/built/admin/assets/posts/{separator-DgZ2VF9r.mjs → separator-DFPLsWCc.mjs} +3 -3
- package/core/built/admin/assets/posts/{settings-D-wnf7Qg.mjs → settings-lnEt3Kb-.mjs} +2 -2
- package/core/built/admin/assets/posts/{sheet-SOdCzxUt.mjs → sheet-CkLfUqdH.mjs} +3 -3
- package/core/built/admin/assets/posts/{skeleton-Du7JXZ_1.mjs → skeleton-BZCi-IYy.mjs} +3 -3
- package/core/built/admin/assets/posts/{source-icon-DcBtKbCl.mjs → source-icon-C0k2hDC_.mjs} +3 -3
- package/core/built/admin/assets/posts/{stats-CeLav-Hu.mjs → stats-AHbSTqzG.mjs} +4 -4
- package/core/built/admin/assets/posts/{table-DlaJMBps.mjs → table-DMrf6wp5.mjs} +2 -2
- package/core/built/admin/assets/posts/{tabs-BQQbtw2g.mjs → tabs-BH8GNJCe.mjs} +14 -14
- package/core/built/admin/assets/posts/tags-C5VV8Gd0.mjs +398 -0
- package/core/built/admin/assets/posts/{tags-CLyaNf39.mjs → tags-DucujdYI.mjs} +2 -2
- package/core/built/admin/assets/posts/use-scroll-restoration-C7A3TpAz.mjs +517 -0
- package/core/built/admin/assets/posts/{use-infinite-virtual-scroll-B_NwiBXK.mjs → virtual-list-window-BIGoc0th.mjs} +322 -244
- package/core/built/admin/assets/posts/{web-TEVKbXSI.mjs → web-DczNailO.mjs} +18 -18
- package/core/built/admin/assets/posts-Dr3u9yOp.js +1 -0
- package/core/built/admin/assets/{referrers-J4vexZCf.js → referrers-6As_USul.js} +1 -1
- package/core/built/admin/assets/{repeat-BxOK9zhN.js → repeat-D-Ki-Cg5.js} +1 -1
- package/core/built/admin/assets/{reply-BoTN-eE0.js → reply-C4V0xZ2U.js} +1 -1
- package/core/built/admin/assets/{select-Bd1zcqox.js → select-Dt579MbD.js} +1 -1
- package/core/built/admin/assets/{settings-D72z6T_a.js → settings-BMsoTszq.js} +1 -1
- package/core/built/admin/assets/{settings-BGbGoa4s.js → settings-Ck1Hqs1x.js} +19 -19
- package/core/built/admin/assets/{sort-button-BOLTpImz.js → sort-button-Bn325H3y.js} +1 -1
- package/core/built/admin/assets/{source-icon-BqEM5MvU.js → source-icon-CNqsYZeA.js} +1 -1
- package/core/built/admin/assets/{sprout-Bf-wc2Vo.js → sprout-C9DbfYGe.js} +1 -1
- package/core/built/admin/assets/{square-Cj_bJ0HZ.js → square-CWrI0H4v.js} +1 -1
- package/core/built/admin/assets/stats/{audience-BiHYBUzT.mjs → audience-DBW5Xu1c.mjs} +3 -3
- package/core/built/admin/assets/stats/{content-helpers-CIXZiyCm.mjs → content-helpers-BR6DcWwH.mjs} +4 -4
- package/core/built/admin/assets/stats/{index-DBB8Oih1.mjs → index-BuS4r1cs.mjs} +5 -5
- package/core/built/admin/assets/stats/{index-CkKk-p14.mjs → index-CFvGHbAV.mjs} +8 -8
- package/core/built/admin/assets/stats/{index-9zQR4gr0.mjs → index-DKS4mzS-.mjs} +3621 -3512
- package/core/built/admin/assets/stats/{index-DMSmQLxG.mjs → index-TeAxlGlY.mjs} +5 -5
- package/core/built/admin/assets/stats/{index-DErXBfDM.mjs → index-ZjicrvMA.mjs} +5 -5
- package/core/built/admin/assets/stats/{sort-button-BqY7GFaO.mjs → sort-button-DbwzvVKL.mjs} +3 -3
- package/core/built/admin/assets/stats/{stats-BeJgKX2G.mjs → stats-BatzfgdA.mjs} +4 -4
- package/core/built/admin/assets/stats/stats.js +1 -1
- package/core/built/admin/assets/stats/{tabs-CPz357mW.mjs → tabs-B32ptD5t.mjs} +3 -3
- package/core/built/admin/assets/stats/{use-growth-stats-WMYXBQE3.mjs → use-growth-stats-DmTT2gKd.mjs} +3 -3
- package/core/built/admin/assets/{stats-DWpHtRym.js → stats-G4Ge9ETb.js} +1 -1
- package/core/built/admin/assets/stats-view-Bx3oDAIW.js +1 -0
- package/core/built/admin/assets/{step-1-Bjya9Gt0.js → step-1-y3anLU0g.js} +1 -1
- package/core/built/admin/assets/{step-2-CJ6I8JNc.js → step-2-Dr1lGnHU.js} +1 -1
- package/core/built/admin/assets/{step-3-3fs6Y2Kj.js → step-3-C_d2hvMs.js} +2 -2
- package/core/built/admin/assets/{table-B4zlzEDP.js → table-CbN_vbUx.js} +1 -1
- package/core/built/admin/assets/{tabs-mR5oJGm5.js → tabs-DFJzY5np.js} +1 -1
- package/core/built/admin/assets/tags-D5g9tXZU.js +1 -0
- package/core/built/admin/assets/{tags-CsgMtkFL.js → tags-Ddg8oG2Y.js} +1 -1
- package/core/built/admin/assets/{textarea-CQjEvapR.js → textarea-DikWsYMt.js} +1 -1
- package/core/built/admin/assets/{tiers-CQE0v797.js → tiers-B7qV_8mO.js} +1 -1
- package/core/built/admin/assets/{toggle-group-CR-Z-bJL.js → toggle-group-tXaaTD7P.js} +1 -1
- package/core/built/admin/assets/{topic-filter-_NyD55eH.js → topic-filter-bQtscKE6.js} +1 -1
- package/core/built/admin/assets/{trash-BFSLkv0z.js → trash--VS50LgS.js} +1 -1
- package/core/built/admin/assets/{upload-BTxT4v2z.js → upload-Dz-DI9rQ.js} +1 -1
- package/core/built/admin/assets/{use-growth-stats-BGymNu5O.js → use-growth-stats-DNVioFUq.js} +1 -1
- package/core/built/admin/assets/use-scroll-restoration-CxWEiCuS.js +1 -0
- package/core/built/admin/assets/{use-simple-pagination-Cq7Afp_c.js → use-simple-pagination-BA6xsVQO.js} +1 -1
- package/core/built/admin/assets/{user-plus-DMl69yKl.js → user-plus-B0tpOnLM.js} +1 -1
- package/core/built/admin/assets/{user-round-check-CVuZXUPz.js → user-round-check-caJYm0bB.js} +1 -1
- package/core/built/admin/assets/virtual-list-window-JdKgHS9L.js +4 -0
- package/core/built/admin/assets/{wallet-cards-zHR_y6Sp.js → wallet-cards-DBM65lA_.js} +1 -1
- package/core/built/admin/assets/{web-CmFHgeQw.js → web-CSXixG1S.js} +1 -1
- package/core/built/admin/index.html +7 -7
- package/core/frontend/helpers/ghost_head.js +1 -4
- package/core/server/data/migrations/versions/6.25/2026-03-26-15-47-00-insert-default-email-design-settings-row.js +42 -0
- package/core/server/data/migrations/versions/6.25/2026-03-30-20-22-25-add-email-design-setting-permissions.js +44 -0
- package/core/server/data/migrations/versions/6.25/2026-03-30-22-16-43-add-email-design-setting-id-to-automated-emails.js +8 -0
- package/core/server/data/migrations/versions/6.25/2026-03-31-13-12-10-backfill-automated-emails-email-design-setting-id.js +45 -0
- package/core/server/data/migrations/versions/6.25/2026-03-31-20-31-19-drop-nullable-on-automated-emails-email-design-setting-id.js +3 -0
- package/core/server/data/schema/fixtures/fixtures.json +35 -0
- package/core/server/data/schema/schema.js +1 -0
- package/core/server/data/seeders/importers/comment-reports-importer.js +1 -3
- package/core/server/data/seeders/importers/comments-importer.js +3 -2
- package/core/server/data/seeders/importers/email-batches-importer.js +3 -3
- package/core/server/data/seeders/importers/email-recipients-importer.js +6 -6
- package/core/server/data/seeders/importers/emails-importer.js +4 -3
- package/core/server/data/seeders/importers/members-click-events-importer.js +1 -1
- package/core/server/data/seeders/importers/members-created-events-importer.js +2 -1
- package/core/server/data/seeders/importers/members-feedback-importer.js +3 -4
- package/core/server/data/seeders/importers/members-login-events-importer.js +3 -2
- package/core/server/data/seeders/importers/members-status-events-importer.js +1 -2
- package/core/server/data/seeders/importers/members-stripe-customers-importer.js +2 -1
- package/core/server/data/seeders/importers/members-stripe-customers-subscriptions-importer.js +4 -2
- package/core/server/data/seeders/importers/members-subscribe-events-importer.js +1 -2
- package/core/server/data/seeders/importers/members-subscription-created-events-importer.js +3 -1
- package/core/server/data/seeders/importers/offer-redemptions-importer.js +3 -3
- package/core/server/data/seeders/utils/database-date.js +26 -1
- package/core/server/models/automated-email.js +27 -0
- package/core/server/models/email-design-setting.js +27 -0
- package/core/server/services/stripe/service.js +1 -2
- package/core/server/services/webhooks/webhook-trigger.js +1 -1
- package/package.json +10 -28
- package/tsconfig.tsbuildinfo +1 -1
- package/yarn.lock +423 -107
- package/components/tryghost-parse-email-address-6.24.0.tgz +0 -0
- package/core/built/admin/assets/comments-CteqV7ZN.js +0 -1
- package/core/built/admin/assets/filters-DXXaCya7.js +0 -1
- package/core/built/admin/assets/index-QB-va_sk.css +0 -1
- package/core/built/admin/assets/index-nBUk6L1X.js +0 -1
- package/core/built/admin/assets/members-DcElgZ2t.js +0 -15
- package/core/built/admin/assets/posts/comments-Bswx2dzs.mjs +0 -1551
- package/core/built/admin/assets/posts/filters-Ds_ZaYIU.mjs +0 -2722
- package/core/built/admin/assets/posts/posts-DI5YQFp4.mjs +0 -17
- package/core/built/admin/assets/posts/tags-CjwolIiT.mjs +0 -395
- package/core/built/admin/assets/posts/use-scroll-restoration-YSR5jwQl.mjs +0 -232
- package/core/built/admin/assets/posts-CJHEP4C-.js +0 -1
- package/core/built/admin/assets/stats-view-CcyaLPwj.js +0 -1
- package/core/built/admin/assets/tags-DEFC6GpD.js +0 -1
- package/core/built/admin/assets/use-infinite-virtual-scroll-CNqGwgHd.js +0 -4
- package/core/built/admin/assets/use-scroll-restoration-BWtb0NrS.js +0 -1
- /package/core/built/admin/assets/{chunk.423.dae9a3bbe7845c3a3cfc.js.LICENSE.txt → chunk.434.de8a15730373eccfeefe.js.LICENSE.txt} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as c,b$ as K,aX as te,bW as se,c0 as F,am as D,j as e,aY as ee,al as y,b5 as pe,aU as he,b7 as xe,b9 as Y,c1 as fe,bc as ae,ai as X,aj as H,c2 as ge,t as Q,bU as be,B as je}from"./index-ZuWSQ3L6.js";import{s as ve,g as q,S as ke,a as we,D as Ne,b as Se}from"./stats-view-CcyaLPwj.js";import{C as ye,a as _e,R as Ce,B as Te}from"./chart-BCQFlmhJ.js";import{E as re}from"./empty-indicator-Bf4Dqk72.js";import{G as De,C as Me,X as Le,Y as Re}from"./gh-chart-Ch6dYUac.js";import{T as Be,a as Ee,K as U,d as E,e as Oe}from"./tabs-mR5oJGm5.js";import{B as Pe,S as V}from"./sort-button-BOLTpImz.js";import{M as ne}from"./user-plus-DMl69yKl.js";import{S as Ae,a as $e,b as ze,c as Ve,d as We,e as He,f as Ke}from"./select-Bd1zcqox.js";import{M as Fe}from"./lucide-react-DZiAu6PQ.js";import{j as Ge,C as le,c as ie,a as Ie,b as Ye,h as Ue}from"./pagemenu-BqoDENpI.js";import{a as Xe,e as Qe,b as qe,c as W,d as P,f as L}from"./table-B4zlzEDP.js";import{u as Je}from"./newsletters-_UvhdBE3.js";import{e as Ze,f as et,g as tt}from"./stats-DWpHtRym.js";import"./loader-circle-CF5G2g_Z.js";import"./wallet-cards-zHR_y6Sp.js";import"./sprout-Bf-wc2Vo.js";import"./_baseAssignValue-DJsCJz6y.js";import"./index-DIO8ceib.js";import"./a-large-small-BnBpzYwl.js";import"./upload-BTxT4v2z.js";import"./at-sign-DC4NtDDM.js";import"./copy-B-MxRWPu.js";import"./message-square-text-DESy3kSk.js";import"./hash-BGd7HEsT.js";import"./inbox-CFzKvW3h.js";import"./minus-DVNwSjD6.js";import"./tags-CsgMtkFL.js";import"./square-Cj_bJ0HZ.js";import"./user-round-check-CVuZXUPz.js";import"./repeat-BxOK9zhN.js";import"./reply-BoTN-eE0.js";import"./trash-BFSLkv0z.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:"max-w-[240px] min-w-[220px] 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 leading-tight font-semibold",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,v]=c.useState(!1),{range:u}=K(),w=te(),[g]=se(),{appSettings:N}=F(),{emailTrackClicks:j,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,$=Math.round(A*10)/10;O=`${A>=0?"+":""}${$}%`}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:"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: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,$=Math.ceil(O*10)/10,z=Math.max(0,A),Z=$===z?z+.1:$;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 G="grid-cols-3";(!j||!S)&&(G="grid-cols-2"),!j&&!S&&(G="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! ${G}`,children:[e.jsx(U,{className:`${!S&&!j&&"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(U,{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)})}),j&&e.jsx(U,{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"&&j&&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"}),j&&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"&&j)&&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:()=>v(!1),onMouseMove:o=>{v(!!(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:"var(--border)",vertical:!1}),e.jsx(Le,{axisLine:{stroke:"var(--border)",strokeWidth:1},dataKey:"post_id",interval:0,stroke:"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:"var(--muted-foreground)"},opacity:.5,stroke:"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}=K(),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($e,{className:"w-auto",children:[e.jsx(Fe,{className:"mr-2",size:16,strokeWidth:1.5}),e.jsx(ze,{placeholder:"Select a newsletter"})]}),e.jsx(Ve,{align:"end",children:e.jsxs(We,{children:[e.jsx(He,{children:"Newsletters"}),l.map(t=>e.jsx(Ke,{value:t.id,children:t.name},t.id))]})})]})},nt=(a,s,r=!0)=>{const l=a??30,{startDate:t,endDate:i}=c.useMemo(()=>X(l),[l]),n=c.useMemo(()=>{const p={date_from:H(t),date_to:H(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(()=>X(t),[t]),p=c.useMemo(()=>{const u={date_from:H(n),date_to:H(h),order:i};return r&&(u.newsletter_id=r),u},[n,h,i,r]),v=et({searchParams:p,enabled:l});return l?v:{data:void 0,isLoading:!1,error:null,isError:!1,refetch:v.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,v=n.data?.stats||[],u=new Map;v.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=Q.memo(({range:a,selectedNewsletterId:s,shouldFetchStats:r,sortBy:l})=>{const t=te(),{settings:i}=K(),n=String(i.find(m=>m.key==="timezone")?.value||"Etc/UTC"),{data:h,isLoading:p,isClicksLoading:v}=oe(a,l,s||void 0,!!r),{appSettings:u}=F(),{emailTrackClicks:w,emailTrackOpens:g}=u?.analytics||{},N=c.useMemo(()=>h?.stats||[],[h]),j=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:j,children:e.jsx(be,{className:"mt-5"})})})}),[j]),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 p-0 text-left whitespace-normal 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:"text-sm whitespace-nowrap",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:v?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:j,children:e.jsx(re,{className:"size-full py-20",title:`No newsletters ${q(a)}`,children:e.jsx(ne,{strokeWidth:1.5})})})}),[N,v,t,w,g,a]);return p||!h?S:R});ce.displayName="NewsletterTableRows";const de=Q.memo(({sortBy:a,setSortBy:s,range:r})=>{const l=c.useMemo(()=>e.jsxs(Ie,{children:[e.jsx(Ye,{children:"Top newsletters"}),e.jsxs(Ue,{children:[" Your best performing newsletters ",q(r)]})]}),[r]),{appSettings:t}=F(),{emailTrackClicks:i,emailTrackOpens:n}=t?.analytics||{};return e.jsx(qe,{children:e.jsxs(W,{children:[e.jsx(P,{className:"min-w-[320px]",variant:"cardhead",children:l}),e.jsx(P,{className:"w-[65px]",children:e.jsx(V,{activeSortBy:a,setSortBy:s,sortBy:"date desc",children:"Date"})}),e.jsx(P,{className:"w-[90px] text-right",children:e.jsx(V,{activeSortBy:a,setSortBy:s,sortBy:"sent_to desc",children:"Sent"})}),n&&e.jsx(P,{className:"w-[90px] text-right",children:e.jsx(V,{activeSortBy:a,setSortBy:s,sortBy:"open_rate desc",children:"Opens"})}),i&&e.jsx(P,{className:"w-[90px] text-right",children:e.jsx(V,{activeSortBy:a,setSortBy:s,sortBy:"click_rate desc",children:"Clicks"})})]})})});de.displayName="NewsletterTableHeader";const me=Q.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(Xe,{children:[e.jsx(de,{range:a,setSortBy:t,sortBy:l}),e.jsx(Qe,{children:e.jsx(ce,{range:a,selectedNewsletterId:s,shouldFetchStats:r,sortBy:l})})]})})})});me.displayName="TopNewslettersTable";const Wt=()=>{const{range:a,selectedNewsletterId:s}=K(),[r]=se(),{appSettings:l}=F(),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:v}=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]),j=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:_}=X(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=v||g||w;return l&&!l.newslettersEnabled?e.jsx(ge,{to:"/analytics"}):e.jsxs(ke,{children:[e.jsx(we,{children:e.jsxs(Ge,{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:j})})}),e.jsx(me,{range:a,selectedNewsletterId:s,shouldFetchStats:!!h})]})})]})};export{Wt as default};
|
|
1
|
+
import{r as c,bX as W,aS as te,bR as se,bY as F,am as D,j as e,aT as ee,al as y,b0 as pe,aP as he,b2 as xe,b4 as Y,bZ as fe,b7 as ae,ai as U,aj as K,b_ as ge,t as Q,bP as be,B as je}from"./index-JMWMnGGt.js";import{s as ve,g as Z,S as ke,a as we,D as Ne,b as Se}from"./stats-view-Bx3oDAIW.js";import{C as ye,a as _e,R as Ce,B as Te}from"./chart-Bs2L1q8g.js";import{E as re}from"./empty-indicator-DjmACVr2.js";import{G as De,C as Me,X as Le,Y as Re}from"./gh-chart-xjwu2HZo.js";import{T as Pe,a as Be,K as X,d as B,e as Ee}from"./tabs-DFJzY5np.js";import{B as Oe,S as $}from"./sort-button-Bn325H3y.js";import{M as ne}from"./user-plus-B0tpOnLM.js";import{S as Ae,a as ze,b as Ve,c as $e,d as He,e as Ke,f as We}from"./select-Dt579MbD.js";import{M as Fe}from"./lucide-react-BfVLf4Hw.js";import{j as Ge,C as le,c as ie,a as Ie,b as Ye,h as Xe}from"./pagemenu-Dq744OgH.js";import{a as Ue,e as Qe,b as Ze,c as H,d as O,f as L}from"./table-CbN_vbUx.js";import{u as qe}from"./newsletters-CT4k07rm.js";import{e as Je,f as et,g as tt}from"./stats-G4Ge9ETb.js";import"./loader-circle-CGDGFypO.js";import"./wallet-cards-DBM65lA_.js";import"./sprout-C9DbfYGe.js";import"./_baseAssignValue-DwWJd_kU.js";import"./index-6Ag8SK_E.js";import"./a-large-small-DzN0AB7t.js";import"./upload-Dz-DI9rQ.js";import"./at-sign-vqoOA4VZ.js";import"./copy-w3c9zkaZ.js";import"./message-square-text-BDJyLbG2.js";import"./hash-Bowe71Lt.js";import"./inbox-DS4qMjUb.js";import"./minus-BM0xhFIQ.js";import"./tags-Ddg8oG2Y.js";import"./square-CWrI0H4v.js";import"./user-round-check-caJYm0bB.js";import"./repeat-D-Ki-Cg5.js";import"./reply-C4V0xZ2U.js";import"./trash--VS50LgS.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:"max-w-[240px] min-w-[220px] 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 leading-tight font-semibold",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,v]=c.useState(!1),{range:u}=W(),w=te(),[g]=se(),{appSettings:N}=F(),{emailTrackClicks:j,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 E;if(o===0)E=k===0?"0%":"+100%";else{const A=(k-o)/o*100,z=Math.round(A*10)/10;E=`${A>=0?"+":""}${z}%`}return{direction:M,value:E}},[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:"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:T,barTicks:P}=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),E=Math.max(...k),A=Math.floor(M*10)/10,z=Math.ceil(E*10)/10,V=Math.max(0,A),J=z===V?V+.1:z;return{barDomain:[V,J],barTicks:[V,J]}},[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 G="grid-cols-3";(!j||!S)&&(G="grid-cols-2"),!j&&!S&&(G="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(Pe,{defaultValue:i,variant:"kpis",children:[e.jsxs(Be,{className:`-mx-6 hidden grid-cols-3 md:visible! md:grid! ${G}`,children:[e.jsx(X,{className:`${!S&&!j&&"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)})}),j&&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(Ee,{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"&&j&&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"}),j&&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"&&j)&&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:()=>v(!1),onMouseMove:o=>{v(!!(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:"var(--border)",vertical:!1}),e.jsx(Le,{axisLine:{stroke:"var(--border)",strokeWidth:1},dataKey:"post_id",interval:0,stroke:"var(--border)",tickFormatter:()=>"",tickLine:!1,tickMargin:10}),e.jsx(Re,{axisLine:!1,domain:T,tickFormatter:o=>y(o),tickLine:!1,ticks:P,width:fe(P,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:"var(--muted-foreground)"},opacity:.5,stroke:"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 ${Z(u)}`,children:e.jsx(ne,{strokeWidth:1.5})})})]})]})},rt=({newsletters:a})=>{const{selectedNewsletterId:s,setSelectedNewsletterId:r}=W(),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(ze,{className:"w-auto",children:[e.jsx(Fe,{className:"mr-2",size:16,strokeWidth:1.5}),e.jsx(Ve,{placeholder:"Select a newsletter"})]}),e.jsx($e,{align:"end",children:e.jsxs(He,{children:[e.jsx(Ke,{children:"Newsletters"}),l.map(t=>e.jsx(We,{value:t.id,children:t.name},t.id))]})})]})},nt=(a,s,r=!0)=>{const l=a??30,{startDate:t,endDate:i}=c.useMemo(()=>U(l),[l]),n=c.useMemo(()=>{const p={date_from:K(t),date_to:K(i)};return s&&(p.newsletter_id=s),p},[t,i,s]),h=Je({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(()=>U(t),[t]),p=c.useMemo(()=>{const u={date_from:K(n),date_to:K(h),order:i};return r&&(u.newsletter_id=r),u},[n,h,i,r]),v=et({searchParams:p,enabled:l});return l?v:{data:void 0,isLoading:!1,error:null,isError:!1,refetch:v.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,v=n.data?.stats||[],u=new Map;v.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=Q.memo(({range:a,selectedNewsletterId:s,shouldFetchStats:r,sortBy:l})=>{const t=te(),{settings:i}=W(),n=String(i.find(m=>m.key==="timezone")?.value||"Etc/UTC"),{data:h,isLoading:p,isClicksLoading:v}=oe(a,l,s||void 0,!!r),{appSettings:u}=F(),{emailTrackClicks:w,emailTrackOpens:g}=u?.analytics||{},N=c.useMemo(()=>h?.stats||[],[h]),j=g&&w?5:g||w?4:3,S=c.useMemo(()=>e.jsx(e.Fragment,{children:e.jsx(H,{className:"last:border-none [&>td]:py-2.5",children:e.jsx(L,{className:"font-medium",colSpan:j,children:e.jsx(be,{className:"mt-5"})})})}),[j]),R=c.useMemo(()=>N.length>0?e.jsx(e.Fragment,{children:N.map(m=>e.jsxs(H,{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 p-0 text-left whitespace-normal 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:"text-sm whitespace-nowrap",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:v?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(H,{className:"border-none hover:bg-transparent",children:e.jsx(L,{className:"text-center group-hover:bg-transparent!",colSpan:j,children:e.jsx(re,{className:"size-full py-20",title:`No newsletters ${Z(a)}`,children:e.jsx(ne,{strokeWidth:1.5})})})}),[N,v,t,w,g,a]);return p||!h?S:R});ce.displayName="NewsletterTableRows";const de=Q.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 ",Z(r)]})]}),[r]),{appSettings:t}=F(),{emailTrackClicks:i,emailTrackOpens:n}=t?.analytics||{};return e.jsx(Ze,{children:e.jsxs(H,{children:[e.jsx(O,{className:"min-w-[320px]",variant:"cardhead",children:l}),e.jsx(O,{className:"w-[65px]",children:e.jsx($,{activeSortBy:a,setSortBy:s,sortBy:"date desc",children:"Date"})}),e.jsx(O,{className:"w-[90px] text-right",children:e.jsx($,{activeSortBy:a,setSortBy:s,sortBy:"sent_to desc",children:"Sent"})}),n&&e.jsx(O,{className:"w-[90px] text-right",children:e.jsx($,{activeSortBy:a,setSortBy:s,sortBy:"open_rate desc",children:"Opens"})}),i&&e.jsx(O,{className:"w-[90px] text-right",children:e.jsx($,{activeSortBy:a,setSortBy:s,sortBy:"click_rate desc",children:"Clicks"})})]})})});de.displayName="NewsletterTableHeader";const me=Q.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(Ue,{children:[e.jsx(de,{range:a,setSortBy:t,sortBy:l}),e.jsx(Qe,{children:e.jsx(ce,{range:a,selectedNewsletterId:s,shouldFetchStats:r,sortBy:l})})]})})})});me.displayName="TopNewslettersTable";const Ht=()=>{const{range:a,selectedNewsletterId:s}=W(),[r]=se(),{appSettings:l}=F(),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:v}=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]),j=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,P)=>T+(P.open_rate||0),0),b=x.reduce((T,P)=>T+(P.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:_}=U(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=v||g||w;return l&&!l.newslettersEnabled?e.jsx(ge,{to:"/analytics"}):e.jsxs(ke,{children:[e.jsx(we,{children:e.jsxs(Ge,{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:j})})}),e.jsx(me,{range:a,selectedNewsletterId:s,shouldFetchStats:!!h})]})})]})};export{Ht as default};
|