ghost 6.55.0 → 6.56.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 (280) hide show
  1. package/components/tryghost-custom-field-types-0.0.0.tgz +0 -0
  2. package/components/tryghost-kg-default-cards-10.3.3.tgz +0 -0
  3. package/components/tryghost-kg-default-nodes-2.1.4.tgz +0 -0
  4. package/components/tryghost-kg-default-transforms-1.3.3.tgz +0 -0
  5. package/components/tryghost-kg-html-to-lexical-1.3.3.tgz +0 -0
  6. package/components/tryghost-kg-lexical-html-renderer-1.4.3.tgz +0 -0
  7. package/components/tryghost-nql-string-0.0.0.tgz +0 -0
  8. package/core/built/admin/assets/{Combination-CJG7Flp-.js → Combination-BCm9FL4o.js} +1 -1
  9. package/core/built/admin/assets/{PolarAngleAxis-BGjf7sBu.js → PolarAngleAxis-C4qtHy1B.js} +1 -1
  10. package/core/built/admin/assets/{RadialBarChart-zeFf9mBz.js → RadialBarChart-Bh09Stsj.js} +1 -1
  11. package/core/built/admin/assets/{account-migration-sjHLx5dy.js → account-migration-D3O_yVck.js} +1 -1
  12. package/core/built/admin/assets/activitypub/{account-migration-DoYXtnZ8.js → account-migration-D8FbP-Z-.js} +7 -7
  13. package/core/built/admin/assets/activitypub/activitypub.js +6 -6
  14. package/core/built/admin/assets/activitypub/{avatar-B3DEDB1l.js → avatar-11EA1VSs.js} +2 -2
  15. package/core/built/admin/assets/activitypub/{avatar-flipboard-Cqrg0XMx.js → avatar-flipboard-jfbLG-xe.js} +2 -2
  16. package/core/built/admin/assets/activitypub/{bluesky-sharing-Bxeh6MKW.js → bluesky-sharing-f1jTQe2P.js} +16 -16
  17. package/core/built/admin/assets/activitypub/{content-formatters-BpQARh28.js → content-formatters-nmTOPY9M.js} +3 -3
  18. package/core/built/admin/assets/activitypub/{copy-D9UWIAan.js → copy-BCwo9ep3.js} +2 -2
  19. package/core/built/admin/assets/activitypub/{dist-D8sFfdpC.js → dist-BEfX-0aW.js} +12 -12
  20. package/core/built/admin/assets/activitypub/{domain-CWueFW6q.js → domain-AaDlZlrA.js} +9 -9
  21. package/core/built/admin/assets/activitypub/{edit-profile-BGxPU7N5.js → edit-profile-DPi8Tl5M.js} +945 -945
  22. package/core/built/admin/assets/activitypub/{explore-DBK-u0Ch.js → explore-CxTzjILQ.js} +8 -8
  23. package/core/built/admin/assets/activitypub/{feed-Bcir5RQZ.js → feed-DPv5x2MX.js} +33 -33
  24. package/core/built/admin/assets/activitypub/{field-BV-CIT3d.js → field-DbgA8lat.js} +3 -3
  25. package/core/built/admin/assets/activitypub/{hash-BC9Q0N4c.js → hash-BWuZoYkA.js} +2 -2
  26. package/core/built/admin/assets/activitypub/{inbox-DQ4ZnC1m.js → inbox-35VDQ2K2.js} +2 -2
  27. package/core/built/admin/assets/activitypub/{inbox-yC0nfvzl.js → inbox-DSrF_i1O.js} +85 -85
  28. package/core/built/admin/assets/activitypub/{label-DTRS9TDk.js → label-CPjFBbo7.js} +3 -3
  29. package/core/built/admin/assets/activitypub/layout-CTgrezN7.js +1 -0
  30. package/core/built/admin/assets/activitypub/{moderation-Dwl9t0pb.js → moderation-BkDC1XVZ.js} +11 -11
  31. package/core/built/admin/assets/activitypub/{note-B-zKsZ7r.js → note-xEyH4xT-.js} +7 -7
  32. package/core/built/admin/assets/activitypub/{notifications-DjJZD54t.js → notifications-DClaL3ui.js} +9 -9
  33. package/core/built/admin/assets/activitypub/{preferences-CoU8vs6d.js → preferences-DpnOa-4Z.js} +20 -20
  34. package/core/built/admin/assets/activitypub/{profile-BAsaJekx.js → profile-Dvi9mz-6.js} +237 -237
  35. package/core/built/admin/assets/activitypub/{reply-CpdMeAO5.js → reply-Cs9ySd6Z.js} +2 -2
  36. package/core/built/admin/assets/activitypub/{routes-CLH3OVTP.js → routes-DFBeTnfn.js} +1139 -1150
  37. package/core/built/admin/assets/activitypub/{separator-BI1FLsYM.js → separator-C5u_VjzY.js} +3 -3
  38. package/core/built/admin/assets/activitypub/{settings-DA6pNJ-Q.js → settings-CV2fFu6D.js} +13 -13
  39. package/core/built/admin/assets/activitypub/{site-CQD42Pw5.js → site-_TgDd_EM.js} +81 -81
  40. package/core/built/admin/assets/activitypub/{step-1-DIDg4aHb.js → step-1-BfnNL2oF.js} +5 -5
  41. package/core/built/admin/assets/activitypub/{step-2-BfGe8BYt.js → step-2-DLndZkO-.js} +6 -6
  42. package/core/built/admin/assets/activitypub/{step-3-mE9spAqw.js → step-3-A-PZTtRE.js} +10 -10
  43. package/core/built/admin/assets/activitypub/{tabs-Cg0saow1.js → tabs-BUbz7tea.js} +317 -315
  44. package/core/built/admin/assets/activitypub/{topic-filter-DLHBZT93.js → topic-filter-BdX_xYYT.js} +3 -3
  45. package/core/built/admin/assets/activitypub/{use-activity-pub-queries-VzbN99u_.js → use-activity-pub-queries-EwuRemHh.js} +2 -2
  46. package/core/built/admin/assets/activitypub/{use-navigate-with-base-path-CAwXTmqH.js → use-navigate-with-base-path-cy4ACBc4.js} +92 -90
  47. package/core/built/admin/assets/activitypub/{use-reply-chain-data-Br4aOWOh.js → use-reply-chain-data-CyFcGfan.js} +5 -5
  48. package/core/built/admin/assets/activitypub/{x-C8tAnXly.js → x-7zk8mV2p.js} +2 -2
  49. package/core/built/admin/assets/{audience-DjEWNhp3.js → audience-CkBb2LlO.js} +1 -1
  50. package/core/built/admin/assets/{automated-emails-DRy7qY-J.js → automated-emails-6t2bIRWf.js} +1 -1
  51. package/core/built/admin/assets/{automations-Bx3VcFIL.js → automations-cMllU545.js} +1 -1
  52. package/core/built/admin/assets/{bluesky-sharing-ClMd0-Ft.js → bluesky-sharing-DPGpyD-G.js} +1 -1
  53. package/core/built/admin/assets/{box-BWbhXh21.js → box-By_EgGtm.js} +1 -1
  54. package/core/built/admin/assets/{breadcrumb-BD0U2ygg.js → breadcrumb-DIfcF5ow.js} +1 -1
  55. package/core/built/admin/assets/build-CsiH26uS.js +1 -0
  56. package/core/built/admin/assets/{card-DGoDJzrn.js → card-aUHX0hyR.js} +1 -1
  57. package/core/built/admin/assets/{chart-BuRT2Y6p.js → chart-BnXyfH11.js} +1 -1
  58. package/core/built/admin/assets/{chart-helpers-fjQKRVyY.js → chart-helpers-DV0FkdcD.js} +1 -1
  59. package/core/built/admin/assets/{checkbox-CWa28lgO.js → checkbox-BIl077a0.js} +1 -1
  60. package/core/built/admin/assets/{chunk.481.6c7395a49484bb4583aa.js → chunk.332.05991a101d67f732dec3.js} +43 -42
  61. package/core/built/admin/assets/chunk.524.87b52f4fada529df2c4c.js +25 -0
  62. package/core/built/admin/assets/chunk.582.340bcca873e806cbd4bb.js +27 -0
  63. package/core/built/admin/assets/{code-editor-view-CCr0rBWS.js → code-editor-view-C0aWNwdl.js} +1 -1
  64. package/core/built/admin/assets/comments-qwhIjH3c.js +1 -0
  65. package/core/built/admin/assets/{container-BYz2Ed39.js → container-LiZf3XdY.js} +1 -1
  66. package/core/built/admin/assets/{data-list-16rkJYYi.js → data-list-CupF7bjM.js} +1 -1
  67. package/core/built/admin/assets/{date-range-select-BFp58EMk.js → date-range-select-dXc-GsVe.js} +1 -1
  68. package/core/built/admin/assets/{disabled-sources-indicator-CUxMfiPa.js → disabled-sources-indicator-DYAXW-6V.js} +1 -1
  69. package/core/built/admin/assets/dist-BUKmD51u.js +1 -0
  70. package/core/built/admin/assets/{dist-2Tnz2Yfq.js → dist-CNlMj7ML.js} +1 -1
  71. package/core/built/admin/assets/{dist-DGzPJ_bO.js → dist-Cb5RSHSg.js} +1 -1
  72. package/core/built/admin/assets/{dist-P_ohUlTi.js → dist-CqO2lWS0.js} +1 -1
  73. package/core/built/admin/assets/domain-B5ogXUBa.js +1 -0
  74. package/core/built/admin/assets/{dropzone-DlK-K2DQ.js → dropzone-BnFG7dDP.js} +1 -1
  75. package/core/built/admin/assets/{edit-profile-BKT-REJw.js → edit-profile-B07jCZy9.js} +1 -1
  76. package/core/built/admin/assets/editor-DDYSOXGN.js +8 -0
  77. package/core/built/admin/assets/{empty-indicator-oX1u1Pkn.js → empty-indicator-WB1WgT9h.js} +1 -1
  78. package/core/built/admin/assets/{explore-ClUpJZOp.js → explore-Ca1y8HW_.js} +1 -1
  79. package/core/built/admin/assets/{feed-DF92dUMP.js → feed-x4iFMBP4.js} +1 -1
  80. package/core/built/admin/assets/{field-Do7lieBA.js → field-ChCAabZg.js} +1 -1
  81. package/core/built/admin/assets/filter-sources-LdtH1e-T.js +1 -0
  82. package/core/built/admin/assets/filters-CLehPo_D.js +1 -0
  83. package/core/built/admin/assets/filters-CjVKRP8U.js +1 -0
  84. package/core/built/admin/assets/{ghost-c4057474943effc568c5659ccc4909d7.js → ghost-7f01131115186d1af84ead76e79646dd.js} +149 -129
  85. package/core/built/admin/assets/{ghost-a9c788f6f0b1ea6cf0f14ca4b13f4496.css → ghost-d38c30b866e59f2e06a357b5eb844fe5.css} +1 -1
  86. package/core/built/admin/assets/{ghost-dark-db36d795d21c61426837df40af270966.css → ghost-dark-1bffd5099ba7a749303133efacf8480b.css} +1 -1
  87. package/core/built/admin/assets/{gift-link-modal-f9VIMNDv.js → gift-link-modal-Buqh2vXh.js} +1 -1
  88. package/core/built/admin/assets/{growth-B3I6gNLm.js → growth-DajOBdN0.js} +1 -1
  89. package/core/built/admin/assets/{growth-CVw1My4S.js → growth-Dy2UOSay.js} +2 -2
  90. package/core/built/admin/assets/{inbox-CFBSu4Ed.js → inbox-BUOLDoji.js} +12 -12
  91. package/core/built/admin/assets/index-08n05-rc.js +67 -0
  92. package/core/built/admin/assets/index-DgUzgFvS.css +1 -0
  93. package/core/built/admin/assets/{inline-EMAm3okk.js → inline-Cw-gigDW.js} +1 -1
  94. package/core/built/admin/assets/input-group-uSK3XT7b.js +1 -0
  95. package/core/built/admin/assets/{input-surface-BpAjZXY5.js → input-surface-BdOe4KzO.js} +1 -1
  96. package/core/built/admin/assets/koenig-lexical/koenig-lexical.js +9535 -9527
  97. package/core/built/admin/assets/koenig-lexical/koenig-lexical.umd.js +124 -124
  98. package/core/built/admin/assets/{koenig-lexical-f8vHRYvz.js → koenig-lexical-BFc4yFed.js} +86 -86
  99. package/core/built/admin/assets/{kpi-card-DSap9rAy.js → kpi-card-BN-E6WYX.js} +1 -1
  100. package/core/built/admin/assets/{kpi-card-DU0rn9Cj.js → kpi-card-CCt-qeWD.js} +1 -1
  101. package/core/built/admin/assets/{kpi-helpers-Dz33AV6h.js → kpi-helpers-DlxTbTs4.js} +1 -1
  102. package/core/built/admin/assets/{kpi-tabs-BtTTrKvJ.js → kpi-tabs-BlcUttpn.js} +1 -1
  103. package/core/built/admin/assets/{label-DS8Mi6G5.js → label-AVrxwmsz.js} +1 -1
  104. package/core/built/admin/assets/{label-picker-1DvSuLA1.js → label-picker-DVnpu_IF.js} +1 -1
  105. package/core/built/admin/assets/labels-DAIqKed7.js +1 -0
  106. package/core/built/admin/assets/layout-B0YLh7R9.js +1 -0
  107. package/core/built/admin/assets/link-helpers-D9LsDOkG.js +1 -0
  108. package/core/built/admin/assets/{list-page-B6ANtzkd.js → list-page-CdsnQR9N.js} +1 -1
  109. package/core/built/admin/assets/member-custom-fields-C8NpZYza.js +1 -0
  110. package/core/built/admin/assets/member-detail-CIVAdKXf.js +1 -0
  111. package/core/built/admin/assets/{members-CQpVFJu4.js → members-oLPiSkXD.js} +2 -2
  112. package/core/built/admin/assets/modals-CB7v-k3T.js +31 -0
  113. package/core/built/admin/assets/{moderation-DySbgyUS.js → moderation-CQ3urTFE.js} +1 -1
  114. package/core/built/admin/assets/newsletter-rbeDX9Wk.js +1 -0
  115. package/core/built/admin/assets/newsletters-vt3Ni1Ov.js +1 -0
  116. package/core/built/admin/assets/{note-C8kxrz6w.js → note-Dk877BTv.js} +1 -1
  117. package/core/built/admin/assets/{notifications-CgtSfX7t.js → notifications-CPlLjPxO.js} +1 -1
  118. package/core/built/admin/assets/{onboarding-route-4qtziA9d.js → onboarding-route-DdStOtjy.js} +1 -1
  119. package/core/built/admin/assets/{overview-Bf2sbznq.js → overview--4V-kx9c.js} +1 -1
  120. package/core/built/admin/assets/overview-DSLv30oz.js +1 -0
  121. package/core/built/admin/assets/{page-header-B3Wb9Jqv.js → page-header-pp4dWmOS.js} +1 -1
  122. package/core/built/admin/assets/{post-analytics-We-ko5Cb.js → post-analytics-BMJrI81R.js} +1 -1
  123. package/core/built/admin/assets/post-analytics-header-pU2m9ZuV.js +1 -0
  124. package/core/built/admin/assets/{post-analytics-provider-B6UynTGb.js → post-analytics-provider-Btml5vJI.js} +1 -1
  125. package/core/built/admin/assets/{post-share-modal-DFfO93_0.js → post-share-modal-AcUZkbfL.js} +1 -1
  126. package/core/built/admin/assets/preferences-Ru4CRPHC.js +5 -0
  127. package/core/built/admin/assets/profile-BNb1oj7D.js +1 -0
  128. package/core/built/admin/assets/{router-provider-C1R4AZ2o.js → router-provider-BmEZf6c6.js} +1 -1
  129. package/core/built/admin/assets/select-B0HteHrp.js +1 -0
  130. package/core/built/admin/assets/settings-B1C9Q3wo.js +4 -0
  131. package/core/built/admin/assets/{settings-WXNeWyU1.js → settings-BGgk7oCI.js} +1 -1
  132. package/core/built/admin/assets/{shade-app-B3heOAfz-CGXQwWeO.js → shade-app-B3heOAfz-BhQXxNkT.js} +1 -1
  133. package/core/built/admin/assets/{share-modal-DsgW3wbg.js → share-modal-BeuydaBf.js} +1 -1
  134. package/core/built/admin/assets/social-urls-DA2lXrhW.js +8 -0
  135. package/core/built/admin/assets/{sort-button-Bb_FCl7e.js → sort-button-Df4t2AL8.js} +1 -1
  136. package/core/built/admin/assets/{source-icon-BeaRxUn9.js → source-icon-ajoaKb41.js} +1 -1
  137. package/core/built/admin/assets/{stack-xiN0eQ6Z.js → stack-CIfOAAVf.js} +1 -1
  138. package/core/built/admin/assets/{stats-Bjj_kmJ1.js → stats-C_lfxZAw.js} +1 -1
  139. package/core/built/admin/assets/{stats-view-BxPbW6K1.js → stats-view-Cxot1iD8.js} +1 -1
  140. package/core/built/admin/assets/{step-1-B1e3-1F8.js → step-1-ogAA4lDr.js} +1 -1
  141. package/core/built/admin/assets/{step-2-C5WaeBJo.js → step-2-C5Xini-7.js} +1 -1
  142. package/core/built/admin/assets/{step-3-B46iVPwu.js → step-3-CZv1FV81.js} +2 -2
  143. package/core/built/admin/assets/{switch-z5Y6Uzt6.js → switch-CyQcwMAv.js} +1 -1
  144. package/core/built/admin/assets/{table-CB-4_HBJ.js → table-DFj1wiYv.js} +1 -1
  145. package/core/built/admin/assets/{tabs-CCEgKYzq.js → tabs-D4y1gqUd.js} +1 -1
  146. package/core/built/admin/assets/{tags-Cg2VJGmG.js → tags-Dmft-Y4O.js} +1 -1
  147. package/core/built/admin/assets/{text-DwtjwGkh.js → text-DU9Hv33_.js} +1 -1
  148. package/core/built/admin/assets/textarea-d9qEkMOP.js +1 -0
  149. package/core/built/admin/assets/{toggle-group-b3IlxvhV.js → toggle-group-R2QMFvXW.js} +1 -1
  150. package/core/built/admin/assets/{topic-filter-DAFT87tQ.js → topic-filter-DGDxDalo.js} +1 -1
  151. package/core/built/admin/assets/{use-analytics-data-S0FTd43s.js → use-analytics-data-C76v4LIp.js} +1 -1
  152. package/core/built/admin/assets/use-filter-params-WrdhAISv.js +1 -0
  153. package/core/built/admin/assets/{use-growth-stats-CIaiHOVb.js → use-growth-stats-aNXJOmQr.js} +1 -1
  154. package/core/built/admin/assets/{use-post-referrers-Cq2vBPrA.js → use-post-referrers-CG0SZioj.js} +1 -1
  155. package/core/built/admin/assets/{use-reply-chain-data-DBDRtGu-.js → use-reply-chain-data-RLdPKRmS.js} +1 -1
  156. package/core/built/admin/assets/{use-simple-pagination-CjYNxdwe.js → use-simple-pagination-DgcF69KI.js} +1 -1
  157. package/core/built/admin/assets/{use-tinybird-query-falHAtuK.js → use-tinybird-query-C1R_Kbmy.js} +1 -1
  158. package/core/built/admin/assets/{use-tinybird-token-D7-8ND1y.js → use-tinybird-token-C9fPjVM_.js} +1 -1
  159. package/core/built/admin/assets/{virtual-list-CvnC9zF2.js → virtual-list-BmTUzeoF.js} +1 -1
  160. package/core/built/admin/assets/{web-B_5GZRvH.js → web-BqW0b0_C.js} +1 -1
  161. package/core/built/admin/assets/web-Cy5GKMWM.js +2 -0
  162. package/core/built/admin/index.html +16 -16
  163. package/core/frontend/services/data/fetch-data.js +10 -5
  164. package/core/frontend/services/routing/api-adapter.js +115 -0
  165. package/core/frontend/services/routing/api-adapter.ts +157 -0
  166. package/core/frontend/services/routing/collection-router.js +5 -3
  167. package/core/frontend/services/routing/controllers/index.js +1 -1
  168. package/core/frontend/services/routing/controllers/rss.js +26 -31
  169. package/core/frontend/services/routing/controllers/rss.ts +66 -0
  170. package/core/frontend/services/routing/controllers/static.js +8 -7
  171. package/core/frontend/services/routing/parent-router.js +17 -4
  172. package/core/frontend/services/routing/permalink-adapter.js +26 -0
  173. package/core/frontend/services/routing/permalink-adapter.ts +23 -0
  174. package/core/frontend/services/routing/registry.js +59 -33
  175. package/core/frontend/services/routing/router-manager.js +9 -13
  176. package/core/frontend/services/routing/static-routes-router.js +4 -4
  177. package/core/frontend/services/routing/taxonomy-router.js +6 -2
  178. package/core/server/data/migrations/versions/6.56/2026-08-03-19-27-51-add-automation-run-step-id-to-automated-email-recipients.js +8 -0
  179. package/core/server/data/migrations/versions/6.56/2026-08-04-14-42-39-restrict-notification-add-permission-to-administrators.js +12 -0
  180. package/core/server/data/schema/fixtures/fixtures.json +2 -2
  181. package/core/server/data/schema/schema.js +1 -0
  182. package/core/server/models/post.js +10 -1
  183. package/core/server/services/automations/automations-repository.ts +3 -1
  184. package/core/server/services/automations/database-automations-repository.js +33 -14
  185. package/core/server/services/automations/database-automations-repository.ts +41 -15
  186. package/core/server/services/automations/get-scheduler-idempotency-key.js +13 -0
  187. package/core/server/services/automations/get-scheduler-idempotency-key.ts +8 -0
  188. package/core/server/services/automations/poll.js +3 -1
  189. package/core/server/services/automations/poll.ts +4 -1
  190. package/core/server/services/automations/service.js +5 -1
  191. package/core/server/services/automations/service.ts +5 -1
  192. package/core/server/services/gift-links/CONTEXT.md +9 -0
  193. package/core/server/services/gifts/CONTEXT.md +55 -0
  194. package/core/server/services/gifts/README.md +28 -0
  195. package/core/server/services/gifts/gift-bookshelf-repository.js +65 -45
  196. package/core/server/services/gifts/gift-bookshelf-repository.ts +203 -74
  197. package/core/server/services/gifts/gift-checkout-adapter.js +59 -0
  198. package/core/server/services/gifts/gift-checkout-offer.js +74 -0
  199. package/core/server/services/gifts/gift-checkout-offer.ts +127 -0
  200. package/core/server/services/gifts/gift-codec.js +63 -0
  201. package/core/server/services/gifts/gift-codec.ts +62 -0
  202. package/core/server/services/gifts/gift-controller.js +6 -31
  203. package/core/server/services/gifts/gift-controller.ts +6 -69
  204. package/core/server/services/gifts/gift-email-service.ts +3 -2
  205. package/core/server/services/gifts/gift-schema.js +34 -0
  206. package/core/server/services/gifts/gift-schema.ts +39 -0
  207. package/core/server/services/gifts/gift-service-wrapper.js +13 -11
  208. package/core/server/services/gifts/gift-service.js +265 -52
  209. package/core/server/services/gifts/gift-service.ts +431 -97
  210. package/core/server/services/gifts/gift.ts +16 -39
  211. package/core/server/services/link-tracking/link-click-repository.js +6 -1
  212. package/core/server/services/link-tracking/link-click-tracking-service.js +12 -3
  213. package/core/server/services/member-welcome-emails/member-welcome-email-renderer.js +4 -3
  214. package/core/server/services/member-welcome-emails/service.js +7 -3
  215. package/core/server/services/members/api.js +1 -2
  216. package/core/server/services/members/import-export/import/importer.ts +3 -2
  217. package/core/server/services/members/import-export/index.js +10 -2
  218. package/core/server/services/members/import-export/index.ts +14 -4
  219. package/core/server/services/members/members-api/controllers/router-controller.js +38 -36
  220. package/core/server/services/members/members-api/members-api.js +13 -7
  221. package/core/server/services/members/members-api/repositories/event-repository.js +4 -94
  222. package/core/server/services/members/members-api/services/member-bread-service.js +3 -3
  223. package/core/server/services/members/members-api/services/payments-service.js +6 -68
  224. package/core/server/services/members-custom-fields/schema.js +8 -1
  225. package/core/server/services/members-custom-fields/schema.ts +8 -0
  226. package/core/server/services/members-custom-fields/values-service.js +118 -2
  227. package/core/server/services/members-custom-fields/values-service.ts +134 -4
  228. package/core/server/services/oembed/oembed-service.js +44 -3
  229. package/core/server/services/posts/posts-service.js +11 -0
  230. package/core/server/services/route-settings/dynamic-routing-service.js +1 -3
  231. package/core/server/services/route-settings/route-settings-parser.js +25 -25
  232. package/core/server/services/route-settings/route-settings-parser.ts +27 -27
  233. package/core/server/services/route-settings/validation-errors.js +68 -4
  234. package/core/server/services/route-settings/validation-errors.ts +79 -4
  235. package/core/server/services/stats/posts-stats-service.js +27 -23
  236. package/core/server/services/stripe/services/webhook/charge-refunded-event-service.js +1 -1
  237. package/core/server/services/stripe/services/webhook/checkout-session-event-service.js +16 -4
  238. package/core/server/services/stripe/stripe-api.js +10 -0
  239. package/core/server/web/gift-preview/controller.js +10 -25
  240. package/core/shared/labs.js +2 -2
  241. package/package.json +10 -9
  242. package/pnpm-lock.yaml +28 -18
  243. package/pnpm-workspace.yaml +5 -4
  244. package/components/tryghost-kg-default-nodes-2.1.3.tgz +0 -0
  245. package/core/built/admin/assets/activitypub/layout-qx-bUL1k.js +0 -1
  246. package/core/built/admin/assets/chunk.524.cffd399783a519e404a9.js +0 -25
  247. package/core/built/admin/assets/chunk.582.eebf0d0b2d202bb746a5.js +0 -27
  248. package/core/built/admin/assets/comments-DyUSMUdj.js +0 -1
  249. package/core/built/admin/assets/dist-CjY-f5Z1.js +0 -1
  250. package/core/built/admin/assets/domain-C0bV2UV8.js +0 -1
  251. package/core/built/admin/assets/editor-Dp865O-4.js +0 -8
  252. package/core/built/admin/assets/filter-sources-BV2rnpfA.js +0 -1
  253. package/core/built/admin/assets/filters-CUXJ2Nm9.js +0 -1
  254. package/core/built/admin/assets/filters-DfbIWc_l.js +0 -1
  255. package/core/built/admin/assets/index-9Cw8z3rA.css +0 -1
  256. package/core/built/admin/assets/index-BGG7NckO.js +0 -67
  257. package/core/built/admin/assets/input-group-BSgG_lVw.js +0 -1
  258. package/core/built/admin/assets/labels-CDSUt4J_.js +0 -1
  259. package/core/built/admin/assets/layout-yQEi2qDM.js +0 -1
  260. package/core/built/admin/assets/link-helpers-7EYqvvHs.js +0 -1
  261. package/core/built/admin/assets/member-custom-fields-yOMHyAg9.js +0 -1
  262. package/core/built/admin/assets/member-detail-BAq7gDaa.js +0 -1
  263. package/core/built/admin/assets/modals-ReORvWnu.js +0 -31
  264. package/core/built/admin/assets/newsletter-CJQvtHqN.js +0 -1
  265. package/core/built/admin/assets/newsletters-B3QQXfGT.js +0 -1
  266. package/core/built/admin/assets/nql-BsgFMd93.js +0 -1
  267. package/core/built/admin/assets/overview-CBfePxcr.js +0 -1
  268. package/core/built/admin/assets/post-analytics-header-Bmc9su6q.js +0 -1
  269. package/core/built/admin/assets/preferences-DJPfHEGu.js +0 -5
  270. package/core/built/admin/assets/profile-DqBQp-gT.js +0 -1
  271. package/core/built/admin/assets/select-C5_xEt5b.js +0 -1
  272. package/core/built/admin/assets/settings-BwiVIXau.js +0 -4
  273. package/core/built/admin/assets/social-urls-BQPFEk1_.js +0 -8
  274. package/core/built/admin/assets/textarea-Bjccvh_E.js +0 -1
  275. package/core/built/admin/assets/use-filter-params-Gpoq2E1L.js +0 -1
  276. package/core/built/admin/assets/web-jFYWCKDn.js +0 -2
  277. package/core/server/services/gifts/gift-repository.js +0 -2
  278. package/core/server/services/gifts/gift-repository.ts +0 -29
  279. package/core/server/services/route-settings/activation-bridge.js +0 -174
  280. package/core/server/services/route-settings/activation-bridge.ts +0 -250
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{i as r}from"./hooks-CixO01lL.js";import{i,r as a}from"./stats-Bjj_kmJ1.js";import{t as o}from"./posts-DhXE7b6r.js";import{o as s}from"./post-helpers-C5OQMBoi.js";import{m as c}from"./chunk-KS7C4IRE-DG9HTHQ3.js";import{a as l}from"./router-provider-C1R4AZ2o.js";import{_ as u,f as d,m as f,p}from"./dist-DGzPJ_bO.js";import{i as m,r as h,t as g}from"./tabs-CCEgKYzq.js";import{a as _,i as v,n as y,o as b,r as x,t as S}from"./card-DGoDJzrn.js";import{c as C,l as w,n as T,o as E,r as ee,s as te,t as ne,u as re}from"./data-list-16rkJYYi.js";import{i as ie,n as ae,o as oe,r as D,t as O}from"./use-simple-pagination-CjYNxdwe.js";import{$n as k,Fa as se,Ir as A,Jn as j,Ps as ce,Qi as M,Ss as le,Ur as N,Vr as P,Vs as ue,Zi as F,aa as I,ar as L,er as R,es as de,nr as fe,or as pe}from"./index-BGG7NckO.js";import{t as me}from"./member-route-0Aa52Ntz.js";import{a as z,i as B,n as V,r as H,t as U}from"./kpi-card-DU0rn9Cj.js";import{r as he,t as ge}from"./post-analytics-header-Bmc9su6q.js";import{n as _e}from"./post-analytics-context-D0Mw-Pmv.js";import{a as ve,i as ye,n as W,o as G,r as be}from"./link-helpers-7EYqvvHs.js";var K=r({dataType:`FeedbackResponseType`,path:e=>`/feedback/${e}/`}),q=e(t(),1),J=(e,t)=>{let{data:n,isLoading:r,error:i}=K(e,{searchParams:{limit:`50`,...t===void 0?{}:{score:t.toString()}}});return{feedback:(0,q.useMemo)(()=>n?.feedback?n.feedback:[],[n]),isLoading:r,error:i}},Y=n(),xe=({feedbackStats:e})=>{let{postId:t}=c(),n=l(),[r,i]=(0,q.useState)(`positive`),{feedback:a,isLoading:o}=J(t||``,+(r===`positive`)),{totalPages:s,paginatedData:d,nextPage:C,previousPage:w,hasNextPage:T,hasPreviousPage:E}=O({data:a,itemsPerPage:9}),ee=o;return(0,Y.jsxs)(S,{children:[(0,Y.jsxs)(_,{className:`pb-5`,children:[(0,Y.jsx)(b,{children:`Feedback`}),(0,Y.jsx)(x,{children:`What did your readers think?`})]}),e.totalFeedback>0?(0,Y.jsxs)(y,{className:`pb-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,Y.jsx)(g,{className:`pb-3`,defaultValue:`positive`,value:r,variant:`button`,onValueChange:e=>i(e),children:(0,Y.jsxs)(h,{className:`gap-1`,children:[(0,Y.jsx)(m,{className:`h-7`,value:`positive`,children:(0,Y.jsxs)(`div`,{className:`flex items-center gap-1 text-xs`,children:[(0,Y.jsx)(F,{size:14,strokeWidth:1.25}),(0,Y.jsx)(`span`,{className:`hidden font-medium sm:visible! sm:inline!`,children:`More like this`}),(0,Y.jsx)(`span`,{className:`font-semibold tracking-tight`,children:p(e.positiveFeedback/e.totalFeedback)})]})}),(0,Y.jsx)(m,{className:`h-7`,value:`negative`,children:(0,Y.jsxs)(`div`,{className:`flex items-center gap-1 text-xs`,children:[(0,Y.jsx)(M,{size:14,strokeWidth:1.25}),(0,Y.jsx)(`span`,{className:`hidden font-medium sm:visible! sm:inline!`,children:`Less like this`}),(0,Y.jsx)(`span`,{className:`font-semibold tracking-tight`,children:p(e.negativeFeedback/e.totalFeedback)})]})})]})}),(0,Y.jsx)(ce,{className:`mr-2 mb-3 lg:hidden xl:visible! xl:block!`,children:`Date`})]}),(0,Y.jsx)(j,{}),ee?(0,Y.jsx)(L,{className:`mt-3`,lines:3}):d&&d.length>0?(0,Y.jsx)(`div`,{className:`flex w-full flex-col py-3`,children:d.map(e=>(0,Y.jsxs)(`div`,{className:`flex h-10 w-full items-center justify-between gap-3 rounded-sm border-none px-2 text-sm hover:cursor-pointer hover:bg-accent`,onClick:()=>{n(`/members/${e.member.id}`,{crossApp:!0})},children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 font-medium`,children:[(0,Y.jsxs)(k,{className:`size-7`,children:[e.member?.avatar_image&&(0,Y.jsx)(`img`,{className:`absolute aspect-square size-full`,src:e.member?.avatar_image}),(0,Y.jsx)(R,{className:`text-white`,style:{backgroundColor:`${u(P(e.member),`45`,`55`)}`},children:N(e.member)})]}),P(e.member)]}),(0,Y.jsx)(`div`,{className:`whitespace-nowrap text-muted-foreground`,children:f(e.created_at)})]},e.id))}):(0,Y.jsx)(`div`,{className:`flex h-full items-center justify-center py-8 text-center text-sm text-muted-foreground`,children:(0,Y.jsxs)(`div`,{children:[`No `,r===`positive`?`positive`:`negative`,` feedback yet`]})})]}):(0,Y.jsxs)(y,{className:`flex grow flex-col items-center justify-center text-center text-sm text-muted-foreground`,children:[(0,Y.jsx)(`div`,{children:`No members have given feedback yet`}),(0,Y.jsx)(`div`,{children:`When someone does, you'll see their response here.`})]}),e.totalFeedback>0&&(0,Y.jsx)(v,{className:`grow-0`,children:(0,Y.jsxs)(`div`,{className:`flex w-full items-center justify-between gap-3`,children:[(0,Y.jsxs)(A,{variant:`outline`,onClick:()=>{let e=`(feedback.post_id:'${t}'+feedback.score:1)`,i=`(feedback.post_id:'${t}'+feedback.score:0)`,a=`${encodeURIComponent(e)}&post=${t}`,o=`${encodeURIComponent(i)}&post=${t}`;n(`/members?filter=${r===`positive`?a:o}`,{crossApp:!0})},children:[`View all`,(0,Y.jsx)(I,{})]}),s>1&&(0,Y.jsx)(ae,{className:`pb-0`,children:(0,Y.jsxs)(D,{children:[(0,Y.jsx)(oe,{disabled:!E,onClick:w}),(0,Y.jsx)(ie,{disabled:!T,onClick:C})]})})]})})]})},Se=e=>{let{data:t,isLoading:n}=o(e),{data:r,isLoading:s}=o(e,{searchParams:{include:`count.positive_feedback,count.negative_feedback`}}),c=(0,q.useMemo)(()=>t?.posts[0],[t]),l=(0,q.useMemo)(()=>r?.posts[0],[r]),u=(0,q.useMemo)(()=>c?{sent:c.email?.email_count||0,opened:c.email?.opened_count||0,clicked:c.count?.clicks||0,openedRate:c.email?.opened_count?c.email.opened_count/c.email.email_count:0,clickedRate:c.count?.clicks&&c.email?.email_count?c.count.clicks/c.email.email_count:0}:{sent:0,opened:0,clicked:0,openedRate:0,clickedRate:0},[c]),d=(0,q.useMemo)(()=>{if(!l?.count)return{positiveFeedback:0,negativeFeedback:0,totalFeedback:0};let e=l.count.positive_feedback||0,t=l.count.negative_feedback||0;return{positiveFeedback:e,negativeFeedback:t,totalFeedback:e+t}},[l]),f=(0,q.useMemo)(()=>c?.newsletter?.id,[c]),{data:p,isLoading:m}=a({searchParams:f?{newsletter_id:f}:{},enabled:!!f}),h=(0,q.useMemo)(()=>p?.stats?p.stats.map(e=>e.post_id):[],[p]),{data:g,isLoading:_}=i({searchParams:f&&h.length>0?{newsletter_id:f,post_ids:h.join(`,`)}:{},enabled:!!f&&h.length>0}),v=(0,q.useMemo)(()=>{if(!p?.stats)return;let e=p.stats,t=g?.stats||[],n=new Map;t.forEach(e=>{n.set(e.post_id,e)});let r=e.map(e=>{let t=n.get(e.post_id);return{...e,total_clicks:t?.total_clicks||0,click_rate:t?.click_rate||0}});return{...p,stats:r}},[p,g]),y=m||_,{data:b,isLoading:x,refetch:S}=ve({searchParams:{filter:`post_id:'${e}'`}}),C=(0,q.useMemo)(()=>{if(!v||!v.stats)return{openRate:0,clickRate:0};let e=v.stats;if(e.length===0)return{openRate:0,clickRate:0};let t=e.reduce((e,t)=>e+(t.open_rate||0),0),n=e.reduce((e,t)=>e+(t.click_rate||0),0);return{openRate:Number((t/e.length).toFixed(2)),clickRate:Number((n/e.length).toFixed(2))}},[v]),w=(0,q.useMemo)(()=>be(b),[b]);return{post:c,stats:u,feedbackStats:d,averageStats:(0,q.useMemo)(()=>({openedRate:C.openRate,clickedRate:C.clickRate}),[C]),topLinks:w,refetchTopLinks:S,isLoading:n||s||y||x}},Ce=({breakpoints:e={sm:1080,md:1280,lg:1360}}={})=>{let[t,n]=(0,q.useState)(`md`);return(0,q.useEffect)(()=>{let t=()=>{let t=window.innerWidth;t<e.sm?n(`sm`):t<e.md?n(`md`):n(`lg`)};return t(),window.addEventListener(`resize`,t),()=>window.removeEventListener(`resize`,t)},[e]),{chartSize:t,isSmall:t===`sm`,isMedium:t===`md`,isLarge:t===`lg`}},we=()=>(0,Y.jsx)(`div`,{className:`absolute top-1/2 -right-4 z-10 hidden size-8 -translate-y-1/2 items-center justify-center rounded-full border bg-background text-muted-foreground md:visible! md:flex!`,children:(0,Y.jsx)(de,{className:`ml-0.5`,size:16,strokeWidth:1.5})}),Te=({dataColor:e,value:t,avgValue:n})=>(0,Y.jsxs)(`div`,{className:`absolute top-6 left-1/2 z-50 flex w-[200px] -translate-x-1/2 flex-col items-stretch gap-1.5 rounded-md bg-background px-4 py-2 text-sm opacity-0 shadow-md transition-all group-hover/block:top-3 group-hover/block:opacity-100`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,Y.jsx)(`div`,{className:`size-2 rounded-full bg-chart-blue opacity-50`,style:{backgroundColor:e}}),`This newsletter`]}),(0,Y.jsx)(`div`,{className:`text-right font-mono`,children:t})]}),(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,Y.jsx)(`div`,{className:`size-2 rounded-full bg-chart-gray opacity-80`}),`Average`]}),(0,Y.jsx)(`div`,{className:`text-right font-mono`,children:n})]})]}),X=()=>{let e=l(),[t,n]=(0,q.useState)(null),[r,i]=(0,q.useState)(``),a=(0,q.useRef)(null),o=(0,q.useRef)(null),{chartSize:c}=Ce(),{appSettings:u}=ue(),{emailTrackClicks:f,emailTrackOpens:m}=u?.analytics||{},{post:h,isPostLoading:g,postId:k}=_e(),M=t=>e(me({filter:t}),{crossApp:!0}),N=h,P=s(N);(0,q.useEffect)(()=>{!g&&!P&&e(`/posts/analytics/${k}`)},[e,k,g,P]);let{stats:F,averageStats:I,topLinks:R,isLoading:de,refetchTopLinks:ve}=Se(k),{mutateAsync:be}=ye(),K=(0,q.useMemo)(()=>{if(!N?.count)return{positiveFeedback:0,negativeFeedback:0,totalFeedback:0};let e=N.count.positive_feedback||0,t=N.count.negative_feedback||0;return{positiveFeedback:e,negativeFeedback:t,totalFeedback:e+t}},[N]),J=(0,q.useMemo)(()=>N?.newsletter?.feedback_enabled===!0,[N]),X=(0,q.useMemo)(()=>K.totalFeedback>0?!0:J,[K.totalFeedback,J]),Ee=e=>{let t=W(R,e);t&&(n(e),i(t.link.to))},De=()=>{if(!t)return;let e=W(R,t);if(!e)return;let a=r.trim();if(a===``||a===e.link.to){n(null),i(``);return}be({originalUrl:e.link.originalTo,editedUrl:r,postId:k},{onSuccess:()=>{n(null),i(``),ve()}})},{totalPages:Oe,paginatedData:ke,nextPage:Ae,previousPage:je,hasNextPage:Me,hasPreviousPage:Ne}=O({data:R,itemsPerPage:10});(0,q.useEffect)(()=>{if(t&&a.current){a.current.focus();let e=W(R,t),s=t=>{o.current&&!o.current.contains(t.target)&&r===e?.link.to&&(n(null),i(``))};return document.addEventListener(`mousedown`,s),()=>{document.removeEventListener(`mousedown`,s)}}},[t,r,R]);let Z=de||g,Pe=[{datatype:`Sent`,value:1,fill:`url(#gradientPurple)`,color:`var(--chart-purple)`}],Fe={percentage:{label:`O`},Average:{label:`Average`},"This newsletter":{label:`This newsletter`}},Ie=[{datatype:`Average`,value:I.openedRate,fill:`url(#gradientGray)`,color:`var(--chart-gray)`},{datatype:`This newsletter`,value:F.openedRate,fill:`url(#gradientBlue)`,color:`var(--chart-blue)`}],Le={percentage:{label:`Opened`},Average:{label:`Average`},"This newsletter":{label:`This newsletter`}},Re=[{datatype:`Average`,value:I.clickedRate,fill:`url(#gradientGray)`,color:`var(--chart-gray)`},{datatype:`This newsletter`,value:F.clickedRate,fill:`url(#gradientTeal)`,color:`var(--chart-teal)`}],ze={percentage:{label:`Clicked`},Average:{label:`Average`},"This newsletter":{label:`This newsletter`}},Q=`grid-cols-3`,$=`aspect-[16/10] w-full max-w-[320px] sm:aspect-[2/1] md:aspect-[10/14] md:max-w-none lg:aspect-square`;return(!f||!m)&&(Q=`grid-cols-2`,$=`aspect-[16/10] w-full max-w-[320px] sm:aspect-[2/1] md:aspect-square md:max-w-none lg:aspect-[15/10]`),!f&&!m&&(Q=`grid-cols-1`,$=`aspect-square w-full sm:aspect-[16/10] md:max-w-[320px] md:max-h-[320px] lg:aspect-[12/10]`),(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(ge,{currentTab:`Newsletter`}),(0,Y.jsx)(he,{children:(0,Y.jsxs)(`div`,{className:`grid grid-cols-1 gap-6 ${X&&f&&`lg:grid-cols-2`}`,children:[(0,Y.jsxs)(S,{className:X&&f?`lg:col-span-2`:``,children:[(0,Y.jsxs)(_,{className:`hidden`,children:[(0,Y.jsx)(b,{children:`Newsletters`}),(0,Y.jsx)(x,{children:`How did this post perform`})]}),Z?(0,Y.jsx)(y,{className:`h-[25vw] p-6`,children:(0,Y.jsx)(fe,{})}):(0,Y.jsxs)(y,{className:`p-0`,children:[(0,Y.jsxs)(`div`,{className:`grid ${Q} items-stretch border-b`,children:[(0,Y.jsxs)(U,{className:`group relative isolate grow p-3 md:px-6 md:py-5`,children:[(0,Y.jsx)(B,{onClick:()=>{M(`emails.post_id:${k}`)},children:`View members →`}),(0,Y.jsxs)(H,{onClick:()=>{M(`emails.post_id:${k}`)},children:[(0,Y.jsx)(`div`,{className:`ml-0.5 size-[9px] rounded-full bg-chart-purple opacity-50`}),`Sent`]}),(0,Y.jsx)(V,{children:(0,Y.jsx)(z,{className:`text-xl leading-none sm:text-2xl md:text-[2.6rem]`,children:d(F.sent)})})]}),m&&(0,Y.jsxs)(U,{className:`p-3 md:px-6 md:py-5`,children:[(0,Y.jsx)(B,{onClick:()=>{M(`opened_emails.post_id:${k}`)},children:`View members →`}),(0,Y.jsxs)(H,{onClick:()=>{M(`opened_emails.post_id:${k}`)},children:[(0,Y.jsx)(`div`,{className:`ml-0.5 size-[9px] rounded-full bg-chart-blue opacity-50`}),`Opened`]}),(0,Y.jsx)(V,{children:(0,Y.jsx)(z,{className:`text-xl leading-none sm:text-2xl md:text-[2.6rem]`,children:d(F.opened)})})]}),f&&(0,Y.jsxs)(U,{className:`group relative isolate grow p-3 md:px-6 md:py-5`,children:[(0,Y.jsx)(B,{onClick:()=>{M(`clicked_links.post_id:${k}`)},children:`View members →`}),(0,Y.jsxs)(H,{onClick:()=>{M(`clicked_links.post_id:${k}`)},children:[(0,Y.jsx)(`div`,{className:`ml-0.5 size-[9px] rounded-full bg-chart-teal opacity-50`}),`Clicked`]}),(0,Y.jsx)(V,{children:(0,Y.jsx)(z,{className:`text-xl leading-none sm:text-2xl md:text-[2.6rem]`,children:d(F.clicked)})})]})]}),(0,Y.jsxs)(`div`,{className:`$ mx-auto grid grid-cols-1 items-center justify-center gap-4 transition-all md:gap-0 ${Q===`grid-cols-2`&&`md:grid-cols-2`} ${Q===`grid-cols-3`&&`md:grid-cols-3`}`,children:[(0,Y.jsxs)(`div`,{className:`relative border-r-0 px-6 ${(m||f)&&`md:border-r`}`,children:[(0,Y.jsx)(G,{className:$,config:Fe,data:Pe,percentageLabel:`Sent`,percentageValue:p(1),size:c,tooltip:!1}),(m||f)&&(0,Y.jsx)(we,{})]}),m&&(0,Y.jsxs)(`div`,{className:`group/block relative border-r-0 px-6 transition-all hover:bg-muted/25 ${f&&`md:border-r`}`,children:[(0,Y.jsx)(Te,{avgValue:p(I.openedRate),dataColor:`var(--chart-blue)`,value:p(F.openedRate)}),(0,Y.jsx)(G,{className:$,config:Le,data:Ie,percentageLabel:`Open rate`,percentageValue:p(F.openedRate),size:c,tooltip:!1}),f&&(0,Y.jsx)(we,{})]}),f&&(0,Y.jsxs)(`div`,{className:`group/block relative px-6 transition-all hover:bg-muted/25`,children:[(0,Y.jsx)(Te,{avgValue:p(I.clickedRate),dataColor:`var(--chart-teal)`,value:p(F.clickedRate)}),(0,Y.jsx)(G,{className:$,config:ze,data:Re,percentageLabel:`Click rate`,percentageValue:p(F.clickedRate),size:c,tooltip:!1})]})]})]})]}),X&&(0,Y.jsx)(xe,{feedbackStats:K}),f&&(0,Y.jsxs)(S,{className:`group/datalist overflow-hidden`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between p-6`,children:[(0,Y.jsxs)(_,{className:`p-0`,children:[(0,Y.jsx)(b,{children:`Newsletter clicks`}),(0,Y.jsx)(x,{children:`Which links resonated with your readers`})]}),(0,Y.jsx)(ce,{className:`mr-2`,children:`Members`})]}),Z?(0,Y.jsxs)(y,{className:`p-6 pt-0`,children:[(0,Y.jsx)(j,{}),(0,Y.jsx)(L,{className:`mt-6`})]}):(0,Y.jsxs)(y,{className:`pb-0`,children:[(0,Y.jsx)(j,{}),R.length>0?(0,Y.jsx)(ne,{className:``,children:(0,Y.jsx)(ee,{children:ke?.map(e=>{let n=F.clicked>0?e.count/F.clicked:0,s=e.link.link_id,c=e.link.title,l=e.link.to,u=e.link.edited;return(0,Y.jsxs)(re,{children:[t!==s&&(0,Y.jsx)(T,{style:{width:`${n?Math.round(n*100):0}%`}}),(0,Y.jsx)(E,{className:`w-full`,children:t===s?(0,Y.jsxs)(`div`,{ref:o,className:`flex w-full items-center gap-2`,children:[(0,Y.jsx)(pe,{ref:a,className:`z-50 h-7 w-full border-border bg-background text-sm`,value:r,onChange:e=>i(e.target.value)}),(0,Y.jsx)(A,{size:`sm`,onClick:De,children:`Update`})]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(A,{className:`mr-2 shrink-0 bg-background`,size:`sm`,variant:`outline`,onClick:()=>Ee(s),children:(0,Y.jsx)(se,{})}),(0,Y.jsx)(`a`,{className:`block truncate font-medium hover:underline`,href:l,rel:`noreferrer`,target:`_blank`,title:c,children:c}),u&&(0,Y.jsx)(`span`,{className:`ml-1 text-gray-500`,children:`(edited)`})]})}),(0,Y.jsxs)(te,{children:[(0,Y.jsx)(C,{children:d(e.count||0)}),(0,Y.jsx)(w,{children:p(n)})]})]},s)})})}):(0,Y.jsx)(`div`,{className:`py-20 text-center text-sm text-gray-700`,children:`You have no links in your post.`})]}),!Z&&R.length>1&&(0,Y.jsx)(v,{children:(0,Y.jsxs)(`div`,{className:`flex w-full items-start justify-between gap-3`,children:[(0,Y.jsxs)(`div`,{className:`mt-2 flex items-start gap-2 pl-4 text-sm text-green`,children:[(0,Y.jsx)(le,{size:20,strokeWidth:1.5}),`Sent a broken link? You can update it!`]}),Oe>1&&(0,Y.jsx)(ae,{className:`pb-0`,children:(0,Y.jsxs)(D,{children:[(0,Y.jsx)(oe,{disabled:!Ne,onClick:je}),(0,Y.jsx)(ie,{disabled:!Me,onClick:Ae})]})})]})})]})]})})]})};export{X as default};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{c as r,g as i,i as a,r as o}from"./stats-Bjj_kmJ1.js";import{g as s}from"./chunk-KS7C4IRE-DG9HTHQ3.js";import{a as c,t as l}from"./router-provider-C1R4AZ2o.js";import{f as u,l as d,p as f}from"./dist-DGzPJ_bO.js";import{g as p,n as m,o as h,r as g}from"./chart-BuRT2Y6p.js";import{a as _,c as v,i as y,l as b,n as x,t as ee,u as te}from"./chart-helpers-fjQKRVyY.js";import{n as ne,t as S}from"./sort-button-Bb_FCl7e.js";import{r as re,t as ie}from"./tabs-CCEgKYzq.js";import{a as C,i as w,n as T,o as E,r as D,s as O,t as k}from"./select-C5_xEt5b.js";import{a as A,n as j,o as M,r as N,t as P}from"./card-DGoDJzrn.js";import{t as ae}from"./empty-indicator-oX1u1Pkn.js";import{a as F,c as I,n as L,r as R,s as z,t as B}from"./table-CB-4_HBJ.js";import{$a as V,Hr as H,Ir as U,Jr as oe,Qa as se,Qr as W,Rr as ce,Vs as G,Wr as K,Xr as le,ar as ue,ii as de,nr as q,p as J}from"./index-BGG7NckO.js";import{n as Y,r as X,t as fe}from"./kpi-tabs-BtTTrKvJ.js";import{r as pe}from"./newsletters-BXJbJgA-.js";import{i as me,n as he,r as ge,t as _e}from"./stats-view-BxPbW6K1.js";import{t as ve}from"./use-analytics-data-S0FTd43s.js";var Z=e(t(),1),Q=n(),ye=({active:e,payload:t})=>{if(!e||!t?.length)return null;let n=t[0].payload,r=typeof n.send_date==`string`?n.send_date:n.send_date.toISOString().split(`T`)[0];return(0,Q.jsxs)(`div`,{className:`max-w-[240px] min-w-[220px] rounded-lg border bg-background px-3 py-2 shadow-lg`,children:[(0,Q.jsxs)(`div`,{className:`mb-2 flex w-full flex-col border-b pb-2`,children:[(0,Q.jsx)(`span`,{className:`text-sm leading-tight font-semibold`,children:n.post_title}),(0,Q.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[`Sent on `,d(r)]})]}),(0,Q.jsxs)(`div`,{className:`mb-1 flex w-full justify-between`,children:[(0,Q.jsx)(`span`,{className:`font-medium text-muted-foreground`,children:`Sent`}),(0,Q.jsx)(`div`,{className:`ml-2 w-full text-right font-mono`,children:u(n.sent_to)})]}),(0,Q.jsxs)(`div`,{className:`mb-1 flex w-full justify-between`,children:[(0,Q.jsx)(`span`,{className:`font-medium text-muted-foreground`,children:`Opens`}),(0,Q.jsxs)(`div`,{className:`ml-2 w-full text-right font-mono`,children:[(0,Q.jsxs)(`span`,{className:`text-muted-foreground`,children:[u(n.total_opens),` / `]}),f(n.open_rate)]})]}),(0,Q.jsxs)(`div`,{className:`mb-1 flex w-full justify-between`,children:[(0,Q.jsx)(`span`,{className:`font-medium text-muted-foreground`,children:`Clicks`}),(0,Q.jsxs)(`div`,{className:`ml-2 w-full text-right font-mono`,children:[(0,Q.jsxs)(`span`,{className:`text-muted-foreground`,children:[u(n.total_clicks),` / `]}),f(n.click_rate)]})]})]})},be=({subscribersData:e,avgsData:t,totals:n,isLoading:r,isAvgsLoading:i,initialTab:a=`total-subscribers`})=>{let[o,l]=(0,Z.useState)(a),[d,S]=(0,Z.useState)(!1),{range:C}=J(),w=c(),[T]=s(),{appSettings:E}=G(),{emailTrackClicks:D,emailTrackOpens:O}=E?.analytics||{},{totalSubscribers:k,avgOpenRate:A,avgClickRate:j}=n,M=(0,Z.useMemo)(()=>{if(!e||e.length===0)return[];let t=[];return t=y(e,C,`value`,`exact`),t.map(e=>({...e,formattedValue:u(e.value),label:`Total Subscribers`}))},[e,C]),N=(0,Z.useMemo)(()=>ee(C,e||[]),[e,C]),P=(0,Z.useMemo)(()=>{if(!M||M.length<=1)return{direction:`same`,value:`0%`};let e=M[0]?.value??0,t=M[M.length-1]?.value??0,n=`same`;t>e?n=`up`:t<e&&(n=`down`);let r;if(e===0)r=t===0?`0%`:`+100%`;else{let n=(t-e)/e*100,i=Math.round(n*10)/10;r=`${n>=0?`+`:``}${i}%`}return{direction:n,value:r}},[M]);(0,Z.useEffect)(()=>{l(a)},[a]);let F=e=>{l(e);let t=new URLSearchParams(T);t.set(`tab`,e),w(`?${t.toString()}`,{replace:!0})},I={open_rate:{label:`Open rate`}},L=(0,Z.useMemo)(()=>({"total-subscribers":{color:`var(--chart-darkblue)`,datakey:`value`},"avg-open-rate":{color:`var(--chart-blue)`,datakey:`open_rate`},"avg-click-rate":{color:`var(--chart-teal)`,datakey:`click_rate`}}),[]),{barDomain:R,barTicks:z}=(0,Z.useMemo)(()=>{if(!t||t.length===0||o===`total-subscribers`)return{barDomain:[0,1],barTicks:[0,1]};let e=L[o]?.datakey;if(!e)return{barDomain:[0,1],barTicks:[0,1]};let n=t.map(t=>t[e]).filter(e=>typeof e==`number`);if(n.length===0)return{barDomain:[0,1],barTicks:[0,1]};let r=o===`avg-open-rate`?A:j,i=Math.max(Math.max(...n),r),a;return a=i<.01?.01:i<.1?(Math.floor(i*100)+1)/100:(Math.floor(i*10)+1)/10,{barDomain:[0,a],barTicks:[0,a]}},[t,o,L,A,j]);if(r)return(0,Q.jsx)(`div`,{className:`-mb-6 flex h-[calc(16vw+132px)] w-full items-start justify-center`,children:(0,Q.jsx)(q,{})});let B=`grid-cols-3`;(!D||!O)&&(B=`grid-cols-2`),!D&&!O&&(B=`grid-cols-1`);let H=o===`avg-open-rate`&&A>R[0]&&A<R[1]||o===`avg-click-rate`&&j>R[0]&&j<R[1],U=o===`avg-open-rate`?A:j;return(0,Q.jsxs)(ie,{defaultValue:a,variant:`kpis`,children:[(0,Q.jsxs)(re,{className:`-mx-6 hidden grid-cols-3 md:visible! md:grid! ${B}`,children:[(0,Q.jsx)(Y,{className:`${!O&&!D&&`cursor-auto after:hidden`}`,value:`total-subscribers`,onClick:()=>{F(`total-subscribers`)},children:(0,Q.jsx)(X,{color:L[`total-subscribers`].color,"data-testid":`total-subscribers-value`,diffDirection:P.direction,diffValue:P.value,label:`Total subscribers`,value:u(k)})}),O&&(0,Q.jsx)(Y,{value:`avg-open-rate`,onClick:()=>{F(`avg-open-rate`)},children:(0,Q.jsx)(X,{className:i?`opacity-50`:``,color:L[`avg-open-rate`].color,label:`Avg. open rate`,value:f(A)})}),D&&(0,Q.jsx)(Y,{value:`avg-click-rate`,onClick:()=>{F(`avg-click-rate`)},children:(0,Q.jsx)(X,{className:i?`opacity-50`:``,color:L[`avg-click-rate`].color,label:`Avg. click rate`,value:f(j)})})]}),(0,Q.jsxs)(oe,{children:[(0,Q.jsx)(de,{className:`md:hidden`,asChild:!0,children:(0,Q.jsxs)(fe,{children:[o===`total-subscribers`&&(0,Q.jsx)(X,{color:L[`total-subscribers`].color,label:`Total subscribers`,value:u(k)}),o===`avg-open-rate`&&O&&(0,Q.jsx)(X,{className:i?`opacity-50`:``,color:L[`avg-open-rate`].color,label:`Avg. open rate`,value:f(A)}),o===`avg-click-rate`&&D&&(0,Q.jsx)(X,{className:i?`opacity-50`:``,color:L[`avg-click-rate`].color,label:`Avg. click rate`,value:f(j)})]})}),(0,Q.jsxs)(le,{align:`end`,className:`w-56`,children:[(0,Q.jsx)(W,{onClick:()=>F(`total-subscribers`),children:`Total subscribers`}),O&&(0,Q.jsx)(W,{onClick:()=>F(`avg-open-rate`),children:`Avg. open rate`}),D&&(0,Q.jsx)(W,{onClick:()=>F(`avg-click-rate`),children:`Avg. click rate`})]})]}),(0,Q.jsxs)(`div`,{className:`my-4 [&_.recharts-cartesian-axis-tick-value]:fill-gray-500`,children:[o===`total-subscribers`&&(0,Q.jsx)(_,{className:`-mb-3 h-[16vw] max-h-[320px] min-h-[180px] w-full`,color:L[`total-subscribers`].color,data:M,id:`mrr`,range:N}),(o===`avg-open-rate`&&O||o===`avg-click-rate`&&D)&&(0,Q.jsx)(Q.Fragment,{children:i?(0,Q.jsx)(`div`,{className:`h-[320px] w-full items-center justify-center`,children:(0,Q.jsx)(q,{})}):t&&t.length>0?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(m,{className:`aspect-auto h-[200px] w-full md:h-[220px] xl:h-[320px]`,config:I,children:(0,Q.jsxs)(ne,{className:d?`cursor-pointer!`:``,data:t,margin:{top:20},onClick:e=>{let t=(e.activePayload?.[0])?.payload?.post_id;t&&w(`/posts/analytics/${t}`,{crossApp:!0})},onMouseLeave:()=>S(!1),onMouseMove:e=>{let t=(e.activePayload?.[0])?.payload?.post_id;S(!!t)},children:[(0,Q.jsx)(`defs`,{children:(0,Q.jsxs)(`linearGradient`,{id:`barGradient`,x1:`0`,x2:`0`,y1:`0`,y2:`1`,children:[(0,Q.jsx)(`stop`,{offset:`0%`,stopColor:L[o].color,stopOpacity:.8}),(0,Q.jsx)(`stop`,{offset:`100%`,stopColor:L[o].color,stopOpacity:.6})]})}),(0,Q.jsx)(te,{horizontal:!0,stroke:`var(--border)`,vertical:!1}),(0,Q.jsx)(b,{axisLine:{stroke:`var(--border)`,strokeWidth:1},dataKey:`post_id`,interval:0,stroke:`var(--border)`,tickFormatter:()=>``,tickLine:!1,tickMargin:10}),(0,Q.jsx)(v,{axisLine:!1,domain:R,tickFormatter:e=>f(e),tickLine:!1,ticks:z,width:ce(z,e=>f(e))}),(0,Q.jsx)(g,{content:(0,Q.jsx)(ye,{}),cursor:!1,isAnimationActive:!1,position:{y:10}}),H&&(0,Q.jsx)(h,{label:{value:`${f(U)}`,position:`left`,offset:8,fill:`var(--muted-foreground)`},opacity:.5,stroke:`var(--muted-foreground)`,strokeDasharray:`4 4`,y:U}),(0,Q.jsx)(p,{activeBar:{fillOpacity:1},dataKey:L[o].datakey,fill:`url(#barGradient)`,fillOpacity:.6,isAnimationActive:!1,maxBarSize:32,minPointSize:3,radius:4})]})}),(0,Q.jsxs)(`div`,{className:`-mt-4 text-center text-sm text-muted-foreground`,children:[`Newsletters `,o===`avg-open-rate`?`opens`:`clicks`,` in this period`]})]}):(0,Q.jsx)(ae,{className:`size-full py-20`,title:`No newsletters ${x(C)}`,children:(0,Q.jsx)(V,{strokeWidth:1.5})})})]})]})},xe=({newsletters:e})=>{let{selectedNewsletterId:t,setSelectedNewsletterId:n}=J(),r=(0,Z.useMemo)(()=>e?.filter(e=>e.status===`active`)||[],[e]);return(0,Z.useEffect)(()=>{if(r.length>0&&!t){let e=r.find(e=>e.sort_order===0);n(e?e.id:r[0].id)}},[r,t,n]),r.length<=1?null:(0,Q.jsxs)(k,{value:t||``,onValueChange:e=>{n(e)},children:[(0,Q.jsxs)(E,{className:`w-auto`,children:[(0,Q.jsx)(se,{className:`mr-2`,size:16,strokeWidth:1.5}),(0,Q.jsx)(O,{placeholder:`Select a newsletter`})]}),(0,Q.jsx)(T,{align:`end`,children:(0,Q.jsxs)(D,{children:[(0,Q.jsx)(C,{children:`Newsletters`}),r.map(e=>(0,Q.jsx)(w,{value:e.id,children:e.name},e.id))]})})]})},Se=(e,t,n=!0)=>{let i=e??30,{startDate:a,endDate:o}=(0,Z.useMemo)(()=>K(i),[i]),s=r({searchParams:(0,Z.useMemo)(()=>{let e={date_from:H(a),date_to:H(o)};return t&&(e.newsletter_id=t),e},[a,o,t]),enabled:n});return n?s:{data:void 0,isLoading:!1,error:null,isError:!1,refetch:s.refetch}},Ce=(e,t,n,r=!0)=>{let i=e??30,a=t??`date desc`,{startDate:s,endDate:c}=(0,Z.useMemo)(()=>K(i),[i]),l=o({searchParams:(0,Z.useMemo)(()=>{let e={date_from:H(s),date_to:H(c),order:a};return n&&(e.newsletter_id=n),e},[s,c,a,n]),enabled:r});return r?l:{data:void 0,isLoading:!1,error:null,isError:!1,refetch:l.refetch}},we=(e,t=[],n=!0)=>{let r=a({searchParams:(0,Z.useMemo)(()=>{let n={};return e&&(n.newsletter_id=e),t.length>0&&(n.post_ids=t.join(`,`)),n},[e,t]),enabled:n});return n?r:{data:void 0,isLoading:!1,error:null,isError:!1,refetch:r.refetch}},Te=(e,t,n,r=!0)=>{let i=Ce(e,t,n,r),a=(0,Z.useMemo)(()=>i.data?.stats?i.data.stats.map(e=>e.post_id):[],[i.data]),o=we(n,a,r&&a.length>0);return{data:(0,Z.useMemo)(()=>{if(!i.data?.stats)return;let e=i.data.stats,t=o.data?.stats||[],n=new Map;t.forEach(e=>{n.set(e.post_id,e)});let r=e.map(e=>{let t=n.get(e.post_id);return{...e,total_clicks:t?.total_clicks||0,click_rate:t?.click_rate||0}});return{...i.data,stats:r}},[i.data,o.data]),isLoading:i.isLoading,isClicksLoading:o.isLoading,error:i.error||o.error,isError:i.isError||o.isError,refetch:()=>{i.refetch(),o.refetch()}}},Ee=Z.memo(({range:e,selectedNewsletterId:t,shouldFetchStats:n,sortBy:r})=>{let i=c(),{settings:a}=ve(),o=String(a.find(e=>e.key===`timezone`)?.value||`Etc/UTC`),{data:s,isLoading:l,isClicksLoading:p}=Te(e,r,t||void 0,!!n),{appSettings:m}=G(),{emailTrackClicks:h,emailTrackOpens:g}=m?.analytics||{},_=(0,Z.useMemo)(()=>s?.stats||[],[s]),v=g&&h?5:g||h?4:3,y=(0,Z.useMemo)(()=>(0,Q.jsx)(Q.Fragment,{children:(0,Q.jsx)(I,{className:`last:border-none [&>td]:py-2.5`,children:(0,Q.jsx)(R,{className:`font-medium`,colSpan:v,children:(0,Q.jsx)(ue,{className:`mt-5`})})})}),[v]),b=(0,Z.useMemo)(()=>_.length>0?(0,Q.jsx)(Q.Fragment,{children:_.map(e=>(0,Q.jsxs)(I,{className:`last:border-none [&>td]:py-2.5`,children:[(0,Q.jsx)(R,{className:`font-medium`,children:(0,Q.jsx)(`div`,{className:`group/link inline-flex items-center gap-2`,children:e.post_id?(0,Q.jsx)(U,{className:`h-auto p-0 text-left whitespace-normal hover:underline!`,title:`View post analytics`,variant:`link`,onClick:()=>{i(`/posts/analytics/${e.post_id}/`,{crossApp:!0})},children:e.post_title}):(0,Q.jsx)(Q.Fragment,{children:e.post_title})})}),(0,Q.jsx)(R,{className:`text-sm whitespace-nowrap`,children:d(e.send_date,o)}),(0,Q.jsx)(R,{className:`text-right font-mono text-sm`,children:u(e.sent_to)}),g&&(0,Q.jsxs)(R,{className:`text-right font-mono text-sm`,children:[(0,Q.jsx)(`span`,{className:`group-hover:hidden`,children:f(e.open_rate)}),(0,Q.jsx)(`span`,{className:`hidden group-hover:visible! group-hover:block!`,children:u(e.total_opens)})]}),h&&(0,Q.jsx)(R,{className:`text-right font-mono text-sm`,children:p?(0,Q.jsx)(`span`,{className:`inline-block h-4 w-8 animate-pulse rounded bg-gray-200`}):(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`span`,{className:`group-hover:hidden`,children:f(e.click_rate)}),(0,Q.jsx)(`span`,{className:`hidden group-hover:visible! group-hover:block!`,children:u(e.total_clicks)})]})})]},e.post_id))}):(0,Q.jsx)(I,{className:`border-none hover:bg-transparent`,children:(0,Q.jsx)(R,{className:`text-center group-hover:bg-transparent!`,colSpan:v,children:(0,Q.jsx)(ae,{className:`size-full py-20`,title:`No newsletters ${x(e)}`,children:(0,Q.jsx)(V,{strokeWidth:1.5})})})}),[_,p,i,h,g,e]);return l||!s?y:b});Ee.displayName=`NewsletterTableRows`;var De=Z.memo(({sortBy:e,setSortBy:t,range:n})=>{let r=(0,Z.useMemo)(()=>(0,Q.jsxs)(A,{children:[(0,Q.jsx)(M,{children:`Top newsletters`}),(0,Q.jsxs)(N,{children:[` Your best performing newsletters `,x(n)]})]}),[n]),{appSettings:i}=G(),{emailTrackClicks:a,emailTrackOpens:o}=i?.analytics||{};return(0,Q.jsx)(z,{children:(0,Q.jsxs)(I,{children:[(0,Q.jsx)(F,{className:`min-w-[320px]`,variant:`cardhead`,children:r}),(0,Q.jsx)(F,{className:`w-[65px]`,children:(0,Q.jsx)(S,{activeSortBy:e,setSortBy:t,sortBy:`date desc`,children:`Date`})}),(0,Q.jsx)(F,{className:`w-[90px] text-right`,children:(0,Q.jsx)(S,{activeSortBy:e,setSortBy:t,sortBy:`sent_to desc`,children:`Sent`})}),o&&(0,Q.jsx)(F,{className:`w-[90px] text-right`,children:(0,Q.jsx)(S,{activeSortBy:e,setSortBy:t,sortBy:`open_rate desc`,children:`Opens`})}),a&&(0,Q.jsx)(F,{className:`w-[90px] text-right`,children:(0,Q.jsx)(S,{activeSortBy:e,setSortBy:t,sortBy:`click_rate desc`,children:`Clicks`})})]})})});De.displayName=`NewsletterTableHeader`;var $=Z.memo(({range:e,selectedNewsletterId:t,shouldFetchStats:n})=>{let[r,i]=(0,Z.useState)(`open_rate desc`);return(0,Q.jsx)(P,{className:`w-full max-w-[calc(100vw-64px)] overflow-x-auto sidebar:max-w-[calc(100vw-64px-280px)]`,"data-testid":`top-newsletters-card`,children:(0,Q.jsx)(j,{children:(0,Q.jsxs)(B,{children:[(0,Q.jsx)(De,{range:e,setSortBy:i,sortBy:r}),(0,Q.jsx)(L,{children:(0,Q.jsx)(Ee,{range:e,selectedNewsletterId:t,shouldFetchStats:n,sortBy:r})})]})})})});$.displayName=`TopNewslettersTable`;var Oe=()=>{let{range:e,selectedNewsletterId:t}=J(),[n]=s(),{appSettings:r}=G(),a=n.get(`tab`)||`total-subscribers`,{data:o,isLoading:c}=pe({searchParams:{limit:`50`}}),u=!c&&o&&o.newsletters.length>0&&!!t,{data:d,isLoading:f}=Se(e,t||void 0,u||!1),{data:p,isLoading:m,isClicksLoading:h}=Te(e,`date asc`,t||void 0,u||!1),g=(0,Z.useMemo)(()=>!o?.newsletters||!t?null:o.newsletters.find(e=>e.id===t)||null,[o,t]),_=(0,Z.useMemo)(()=>{let e=g?.count?.active_members||d?.stats?.[0]?.total||0,t=0,n=0;if(p?.stats&&p.stats.length>0){let e=p.stats,r=e.reduce((e,t)=>e+(t.open_rate||0),0),i=e.reduce((e,t)=>e+(t.click_rate||0),0);t=r/e.length,n=i/e.length}return{totalSubscribers:e,avgOpenRate:t,avgClickRate:n}},[g,d,p]),v=(0,Z.useMemo)(()=>{if(!d?.stats?.[0]?.values||d.stats[0].values.length===0){let{startDate:t,endDate:n}=K(e),r=[],i=t.clone().toDate(),a=n.toDate();for(;i<=a;)r.push({date:i.toISOString().split(`T`)[0],value:0}),i.setDate(i.getDate()+1);return r}let t=d.stats[0].values;if(t.length===1){let n=t[0],r=new Date,i=e,a=new Date(r.getTime()-i*24*60*60*1e3);return[{...n,date:a.toISOString().split(`T`)[0]},{...n,date:r.toISOString().split(`T`)[0]}]}return t},[d,e]),y=(0,Z.useMemo)(()=>p?.stats?p.stats.map(e=>({post_id:e.post_id,post_title:e.post_title,send_date:e.send_date,sent_to:e.sent_to,total_opens:e.total_opens,open_rate:e.open_rate,total_clicks:e.total_clicks||0,click_rate:e.click_rate||0})):[],[p]),b=f||h||m;return r&&!r.newslettersEnabled?(0,Q.jsx)(l,{to:`/analytics`}):(0,Q.jsxs)(he,{children:[(0,Q.jsx)(ge,{children:(0,Q.jsxs)(i,{children:[(0,Q.jsx)(xe,{newsletters:o?.newsletters}),(0,Q.jsx)(me,{})]})}),(0,Q.jsx)(_e,{isLoading:!1,loadingComponent:(0,Q.jsx)(Q.Fragment,{}),children:(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(P,{"data-testid":`newsletters-card`,children:(0,Q.jsx)(j,{children:(0,Q.jsx)(be,{avgsData:y,initialTab:a,isAvgsLoading:!1,isLoading:b,subscribersData:v,totals:_})})}),(0,Q.jsx)($,{range:e,selectedNewsletterId:t,shouldFetchStats:!!u})]})})]})};export{Oe as default};
@@ -1 +0,0 @@
1
- function e(e){return`'${e.replace(/'/g,`\\'`)}'`}export{e as t};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{t as r}from"./use-tinybird-query-falHAtuK.js";import{i,o as a}from"./post-helpers-C5OQMBoi.js";import{m as o}from"./chunk-KS7C4IRE-DG9HTHQ3.js";import{a as s}from"./router-provider-C1R4AZ2o.js";import{f as c,p as l}from"./dist-DGzPJ_bO.js";import{a as u,i as d,t as f}from"./chart-helpers-fjQKRVyY.js";import{a as p,n as m,o as h,t as g}from"./card-DGoDJzrn.js";import{c as _,l as v,n as y,o as b,r as ee,s as te,t as x,u as S}from"./data-list-16rkJYYi.js";import{t as C}from"./empty-indicator-oX1u1Pkn.js";import{$a as w,Co as T,Gr as ne,Hr as E,Ir as D,Jn as O,Ps as k,So as A,Vs as re,Wr as ie,da as ae,ir as oe,lo as j,nr as M,u as se}from"./index-BGG7NckO.js";import{n as N,r as P,t as F}from"./kpi-card-DSap9rAy.js";import{t as ce}from"./disabled-sources-indicator-CUxMfiPa.js";import{t as I}from"./use-analytics-data-S0FTd43s.js";import{a as L,n as R,r as z,t as B}from"./kpi-card-DU0rn9Cj.js";import{n as le,r as ue,t as de}from"./post-analytics-header-Bmc9su6q.js";import{t as fe}from"./gift-links-CsUhefWG.js";import{r as pe,t as me}from"./gift-link-modal-f9VIMNDv.js";import{n as he}from"./post-analytics-context-D0Mw-Pmv.js";import{n as ge,t as _e}from"./use-post-referrers-Cq2vBPrA.js";import{a as V,o as H,r as U,t as W}from"./link-helpers-7EYqvvHs.js";import{n as ve,r as G}from"./kpi-helpers-Dz33AV6h.js";var K=e(t(),1),q=n(),ye=({post:e,isNewsletterStatsLoading:t,isWebShown:n})=>{let{postId:r}=o(),i=s(),a=(0,K.useMemo)(()=>{let t=e.email?.opened_count||0,n=e.email?.email_count||0,r=e.count?.clicks||0;return{opened:t,clicked:r,openedRate:n>0?t/n:0,clickedRate:n>0?r/n:0,sent:n}},[e]),{data:u}=V({searchParams:{filter:`post_id:'${r}'`}}),d=(0,K.useMemo)(()=>U(u),[u]),f=[{datatype:`Clicked`,value:a.clickedRate,fill:`url(#gradientTeal)`,color:`var(--chart-teal)`},{datatype:`Opened`,value:a.openedRate,fill:`url(#gradientBlue)`,color:`var(--chart-blue)`}],C={percentage:{label:`Opened`},Average:{label:`Clicked`},"This newsletter":{label:`Opened`}},T=e.email_only||!n;return(0,q.jsxs)(g,{className:`group/datalist overflow-hidden ${T&&`col-span-2`}`,children:[(0,q.jsxs)(`div`,{className:`relative flex items-center justify-between gap-6`,children:[(0,q.jsx)(p,{children:(0,q.jsxs)(h,{className:`flex items-center gap-1.5 text-lg`,children:[(0,q.jsx)(w,{size:16,strokeWidth:1.5}),`Newsletter performance`]})}),(0,q.jsx)(D,{className:`absolute right-6 translate-x-10 opacity-0 transition-all duration-300 group-hover/datalist:translate-x-0 group-hover/datalist:opacity-100 focus-visible:translate-x-0 focus-visible:opacity-100`,size:`sm`,variant:`outline`,onClick:()=>{i(`/posts/analytics/${r}/newsletter`)},children:`View more`})]}),t?(0,q.jsx)(m,{children:(0,q.jsx)(`div`,{className:`mx-auto flex min-h-[250px] items-center justify-center xl:size-full`,children:(0,q.jsx)(M,{})})}):(0,q.jsxs)(m,{className:`${T&&`grid grid-cols-2`}`,children:[(0,q.jsxs)(`div`,{className:`${T&&`border-r pr-6`}`,children:[(0,q.jsxs)(`div`,{className:`grid grid-cols-2 gap-6`,children:[(0,q.jsx)(F,{className:`group relative flex grow flex-row items-start justify-between gap-5 border-none px-0 pt-0`,children:(0,q.jsxs)(`div`,{className:`flex grow flex-col gap-1.5 border-none pb-0`,children:[(0,q.jsx)(N,{color:`var(--chart-blue)`,children:`Open rate`}),(0,q.jsx)(P,{value:l(a.openedRate)})]})}),(0,q.jsx)(F,{className:`group relative flex grow flex-row items-start justify-between gap-5 border-none px-0 pt-0`,children:(0,q.jsxs)(`div`,{className:`flex grow flex-col gap-1.5 border-none pb-0`,children:[(0,q.jsx)(N,{color:`var(--chart-teal)`,children:`Click rate`}),(0,q.jsx)(P,{value:l(a.clickedRate)})]})})]}),!T&&(0,q.jsx)(O,{}),(0,q.jsx)(`div`,{className:`mx-auto my-6 h-[240px]`,children:(0,q.jsx)(H,{className:`pointer-events-none aspect-square h-[240px]`,config:C,data:f,tooltip:!1})})]}),(0,q.jsxs)(`div`,{className:`${T&&`pl-6`}`,children:[!T&&(0,q.jsx)(O,{}),(0,q.jsxs)(`div`,{className:T?``:`pt-3`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between gap-3 ${T?`pb-3`:`py-3`}`,children:[(0,q.jsx)(`span`,{className:`font-medium text-muted-foreground`,children:`Top clicked links in this email`}),(0,q.jsx)(k,{children:`Members`})]}),d.length>0?(0,q.jsx)(x,{className:``,children:(0,q.jsx)(ee,{children:d.slice(0,T?10:5).map(e=>{let t=a.clicked>0?e.count/a.clicked:0;return(0,q.jsxs)(S,{children:[(0,q.jsx)(y,{style:{width:`${t?Math.round(t*100):0}%`}}),(0,q.jsx)(b,{children:(0,q.jsxs)(`div`,{className:`flex items-center space-x-2 overflow-hidden`,children:[(0,q.jsx)(j,{className:`shrink-0 text-muted-foreground`,size:16,strokeWidth:1.5}),(0,q.jsx)(`a`,{className:`block truncate font-medium hover:underline`,href:e.link.to,rel:`noreferrer`,target:`_blank`,title:e.link.to,children:W(e.link.to,!0)})]})}),(0,q.jsxs)(te,{children:[(0,q.jsx)(_,{children:c(e.count||0)}),(0,q.jsx)(v,{children:l(t)})]})]},e.link.link_id)})})}):(0,q.jsx)(`div`,{className:`py-20 text-center text-sm text-gray-700`,children:`You have no links in your post.`})]})]})]})]})},be=({chartData:e,range:t,isLoading:n,visitors:r,sourcesData:i,isNewsletterShown:a=!0})=>{let{postId:l}=o(),d=s(),{site:f}=I(),_=f.url,v=f.icon,y=(0,K.useMemo)(()=>i?i.reduce((e,t)=>e+Number(t.visits||0),0):0,[i]);return(0,q.jsx)(q.Fragment,{children:(0,q.jsxs)(g,{className:`group/datalist overflow-hidden ${!a&&`col-span-2`}`,"data-testid":`web-performance`,children:[(0,q.jsxs)(`div`,{className:`relative flex items-center justify-between gap-6`,children:[(0,q.jsx)(p,{children:(0,q.jsxs)(h,{className:`flex items-center gap-1.5 text-lg`,children:[(0,q.jsx)(A,{size:16,strokeWidth:1.5}),`Web performance`]})}),(0,q.jsx)(D,{className:`absolute right-6 translate-x-10 opacity-0 transition-all duration-300 group-hover/datalist:translate-x-0 group-hover/datalist:opacity-100 focus-visible:translate-x-0 focus-visible:opacity-100`,size:`sm`,variant:`outline`,onClick:()=>{d(`/posts/analytics/${l}/web`)},children:`View more`})]}),(0,q.jsxs)(m,{children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(F,{className:`group relative flex grow flex-row items-start justify-between gap-5 border-none px-0 pt-0`,"data-testid":`unique-visitors`,children:(0,q.jsxs)(`div`,{className:`flex grow flex-col gap-1.5 border-none pb-0`,children:[(0,q.jsx)(N,{color:`var(--chart-blue)`,children:`Unique visitors`}),(0,q.jsx)(P,{value:c(r)})]})}),(0,q.jsx)(O,{}),(0,q.jsx)(`div`,{className:`max-h-[288px] py-6 [&_.recharts-cartesian-axis-tick-value]:fill-gray-500`,children:n?(0,q.jsx)(`div`,{className:`flex h-[16vw] min-h-[240px] items-center justify-center`,children:(0,q.jsx)(M,{})}):(0,q.jsx)(u,{className:`aspect-auto h-[240px] w-full`,color:`var(--chart-blue)`,data:e||[],id:`visitors`,range:t,syncId:`overview-charts`})})]}),a&&(0,q.jsxs)(`div`,{className:a?`border-t pt-3`:`-mt-3`,children:[(0,q.jsx)(`div`,{children:(0,q.jsxs)(`div`,{className:`flex items-center justify-between gap-3 py-3`,children:[(0,q.jsx)(`span`,{className:`font-medium text-muted-foreground`,children:`How readers found this post`}),(0,q.jsx)(k,{children:`Visitors`})]})}),i&&i.length>0?(0,q.jsx)(G,{data:i,range:t,siteIcon:v,siteUrl:_,tableOnly:!0,topSourcesLimit:5,totalVisitors:y}):(0,q.jsx)(C,{className:`h-full py-10`,description:`Once someone visits this post, sources will show here`,title:`No visitors since you published this post`,children:(0,q.jsx)(A,{strokeWidth:1.5})})]})]})]})})},J=()=>{let e=s(),{statsConfig:t,isLoading:n}=I(),{post:o,isPostLoading:l,postId:u}=he(),{totals:_,isLoading:v,currencySymbol:y}=_e(u),{appSettings:b}=re(),{emailTrackClicks:ee,emailTrackOpens:te}=b?.analytics||{},x=b?.analytics?.webAnalytics===!0,S=le(o),{token:C,isLoading:w,error:O}=fe(u,{enabled:S}),{usage:k,loading:A,error:j}=pe({postUuid:o?.uuid,token:C,tokenLoading:w,tokenError:O,enabled:S}),[N,P]=(0,K.useState)(!1),F=(0,K.useMemo)(()=>o?.published_at?ne(o.published_at):se.allTime.value,[o?.published_at]),{startDate:V,endDate:H,timezone:U}=ie(F),W=(0,K.useMemo)(()=>{let e={site_uuid:t?.id||``,date_from:E(V),date_to:E(H),timezone:U,post_uuid:``};return!l&&o?.uuid?{...e,post_uuid:o.uuid}:e},[l,o,t?.id,V,H,U]),{data:G,loading:J}=r({endpoint:`api_kpis`,statsConfig:t,params:W}),xe=(0,K.useMemo)(()=>G?.length?G.reduce((e,t)=>{let n=Number(t.visits);return e+(isNaN(n)?0:n)},0):0,[G]),Y=ve.visits,Se=f(F,G||[],{fieldName:Y.dataKey}),Ce=d(G||[],F,Y.dataKey,`sum`)?.map(e=>{let t=Number(e[Y.dataKey]);return{date:String(e.date),value:t,formattedValue:Y.formatter(t),label:Y.label}}),{data:we,loading:Te}=r({endpoint:`api_top_sources`,statsConfig:t,params:W}),Ee=n||v||l||J,De=l||n||J,X=a(o)&&te&&ee,Z=!o?.email_only&&x,Q=b?.analytics.membersTrackSources,$=!!(S&&o&&b?.analytics.webAnalytics);return(0,K.useEffect)(()=>{!l&&o&&i(o)&&!x&&Q&&e(`/posts/analytics/${u}/growth`,{replace:!0})},[l,o,x,e,u,Q]),l?(0,q.jsx)(M,{}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(de,{currentTab:`Overview`}),(0,q.jsx)(ue,{children:(0,q.jsxs)(`div`,{className:`flex flex-col gap-6 lg:grid lg:grid-cols-2`,children:[Z&&(0,q.jsx)(be,{chartData:Ce,isLoading:De||Ee||Te,isNewsletterShown:X,range:Se,sourcesData:we,visitors:xe}),X&&(0,q.jsx)(ye,{isNewsletterStatsLoading:l,isWebShown:Z,post:o}),(Q||$)&&(0,q.jsxs)(`div`,{className:`col-span-2 flex flex-col gap-6 lg:grid lg:grid-cols-3`,children:[Q&&(0,q.jsxs)(g,{className:`group overflow-hidden p-0 ${$?`lg:col-span-2`:`lg:col-span-3`}`,"data-testid":`growth`,children:[(0,q.jsxs)(`div`,{className:`relative flex items-center justify-between gap-6`,children:[(0,q.jsx)(p,{children:(0,q.jsxs)(h,{className:`flex items-center gap-1.5 text-lg`,children:[(0,q.jsx)(ae,{size:16,strokeWidth:1.5}),`Growth`]})}),(0,q.jsx)(D,{className:`absolute right-6 translate-x-10 opacity-0 transition-all duration-200 group-hover:translate-x-0 group-hover:opacity-100 focus-visible:translate-x-0 focus-visible:opacity-100`,size:`sm`,variant:`outline`,onClick:()=>{e(`/posts/analytics/${u}/growth`)},children:`View more`})]}),(0,q.jsx)(m,{className:`flex flex-col gap-6 px-0 md:grid md:grid-cols-3 md:items-stretch md:gap-0`,children:Ee?Array.from({length:3},(e,t)=>(0,q.jsxs)(`div`,{className:`h-[98px] gap-1 border-r px-6 py-5 last:border-r-0`,children:[(0,q.jsx)(oe,{className:`w-2/3`}),(0,q.jsx)(oe,{className:`h-7 w-12`})]},t)):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(B,{className:`grow gap-1 py-0`,children:[(0,q.jsx)(z,{children:`Free members`}),(0,q.jsx)(R,{children:(0,q.jsx)(L,{className:`text-[2.2rem]`,children:c(_?.free_members||0)})})]}),b?.paidMembersEnabled&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(B,{className:`grow gap-1 py-0`,children:[(0,q.jsx)(z,{children:`Paid members`}),(0,q.jsx)(R,{children:(0,q.jsx)(L,{className:`text-[2.2rem]`,children:c(_?.paid_members||0)})})]}),(0,q.jsxs)(B,{className:`grow gap-1 py-0`,children:[(0,q.jsx)(z,{children:`MRR impact`}),(0,q.jsx)(R,{children:(0,q.jsxs)(L,{className:`text-[2.2rem]`,children:[y,c(ge(_?.mrr||0))]})})]})]})]})})]}),$&&(0,q.jsxs)(g,{className:`group/datalist overflow-hidden ${Q?`lg:col-span-1`:`lg:col-span-3`}`,"data-testid":`gift-link-card`,children:[(0,q.jsxs)(`div`,{className:`relative flex items-center justify-between gap-6`,children:[(0,q.jsx)(p,{children:(0,q.jsxs)(h,{className:`flex items-center gap-1.5 text-lg`,children:[(0,q.jsx)(T,{size:16,strokeWidth:1.5}),`Gift link`]})}),(0,q.jsx)(D,{className:`absolute right-6 translate-x-10 opacity-0 transition-all duration-300 group-hover/datalist:translate-x-0 group-hover/datalist:opacity-100 focus-visible:translate-x-0 focus-visible:opacity-100`,size:`sm`,variant:`outline`,onClick:()=>P(!0),children:`Share`})]}),!A&&!j&&(0,q.jsxs)(m,{className:`flex flex-col gap-1`,children:[(0,q.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:`Visitors`}),(0,q.jsx)(`span`,{className:`text-[2.2rem] leading-none font-semibold`,"data-testid":`gift-link-card-visitors`,children:c(k?.visits??0)})]})]})]}),!Z&&!X&&!Q&&!$&&(0,q.jsx)(ce,{className:`col-span-2 py-20`})]})}),$&&(0,q.jsx)(me,{open:N,postId:u,source:`gift-link-card`,onOpenChange:P},u)]})};export{J as default};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{m as r,o as i}from"./hooks-CixO01lL.js";import{h as ee,m as a,p as te,v as ne}from"./stats-Bjj_kmJ1.js";import{i as re}from"./posts-DhXE7b6r.js";import{t as o}from"./analytics-53FOa2wq.js";import{i as s,n as ie,o as c,r as l}from"./post-helpers-C5OQMBoi.js";import{a as ae}from"./router-provider-C1R4AZ2o.js";import{c as u,f as oe,l as d,u as f}from"./dist-DGzPJ_bO.js";import{a as se,i as ce,n as p,o as le,r as ue,t as de}from"./breadcrumb-BD0U2ygg.js";import{r as m}from"./users-Dkv8NQZe.js";import{As as fe,Fa as pe,Io as me,Ir as h,Ji as he,Jr as ge,Lo as _e,Qr as g,Vs as _,Xr as v,Zr as y,cr as b,dr as x,fr as S,ii as C,lr as w,mr as T,ni as E,pa as D,pr as O,sr as k,ur as A}from"./index-BGG7NckO.js";import{t as j}from"./use-analytics-data-S0FTd43s.js";import{t as M}from"./post-share-modal-DFfO93_0.js";import{t as N}from"./get-site-timezone-HgL0jI_F.js";import{i as P,t as F}from"./gift-link-modal-f9VIMNDv.js";import{n as ve}from"./post-analytics-context-D0Mw-Pmv.js";var I=e(t(),1),L=n(),R=(0,I.forwardRef)(({children:e,className:t,...n},r)=>(0,L.jsx)(`section`,{ref:r,className:u(`flex size-full grow flex-col gap-6 py-8`,t),...n,children:e}));R.displayName=`PostAnalyticsContent`;var z=e=>{let{data:t}=i();return!e||!t?!1:e.status===`published`&&!!e.visibility&&e.visibility!==`public`&&m(t)},B=({currentTab:e,children:t})=>{let n=ae(),{appSettings:i}=_(),{mutateAsync:u}=re(),m=r(),[R,B]=(0,I.useState)(!1),[V,H]=(0,I.useState)(!1),[ye,U]=(0,I.useState)(!1),{settings:be,site:W,statsConfig:xe}=j(),{post:G,isPostLoading:K,postId:q}=ve(),J=z(G),Y=N(be),X=(0,I.useRef)(!1);(0,I.useEffect)(()=>{if(!V){X.current=!1;return}X.current||(X.current=!0,o(`Share Modal Opened`,{giftLinkShown:J,source:`post-analytics`}))},[V,J]);let{activeVisitors:Z,isLoading:Q}=ne({postUuid:G?.uuid,statsConfig:xe,enabled:i?.analytics?.webAnalytics??!1}),$=(0,I.useMemo)(()=>{if(!G)return[];let e=[];return s(G)&&!i?.analytics.webAnalytics||(e.push(`Overview`),!G.email_only&&i?.analytics.webAnalytics&&e.push(`Web`)),c(G)&&e.push(`Newsletter`),i?.analytics.membersTrackSources&&e.push(`Growth`),e},[G,i?.analytics.webAnalytics,i?.analytics.membersTrackSources]),Se=()=>{G&&B(!0)},Ce=async()=>{if(G)try{await u(q),B(!1),n(`/posts/`,{crossApp:!0})}catch(e){m(e)}};return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`header`,{className:`z-50 -mx-8 bg-white/70 backdrop-blur-md dark:bg-background`,children:(0,L.jsx)(`div`,{className:`relative flex min-h-[102px] w-full items-start justify-between gap-5 px-8 pt-8 pb-0`,"data-header":`header`,children:(0,L.jsxs)(`div`,{className:`flex w-full flex-col gap-6`,children:[(0,L.jsxs)(`div`,{className:`flex w-full flex-col justify-between md:flex-row md:items-center`,children:[(0,L.jsx)(de,{children:(0,L.jsxs)(ce,{children:[(0,L.jsx)(p,{children:(0,L.jsx)(ue,{asChild:!0,children:(0,L.jsx)(`button`,{className:`cursor-pointer rounded-sm focus-visible:ring-1 focus-visible:ring-focus-ring focus-visible:outline-hidden`,type:`button`,onClick:()=>n(`/analytics/`,{crossApp:!0}),children:`Analytics`})})}),(0,L.jsx)(le,{}),(0,L.jsx)(p,{children:(0,L.jsx)(se,{children:`Post analytics`})})]})}),(0,L.jsxs)(`div`,{className:`flex w-full items-center gap-2 md:w-auto`,children:[i?.analytics.webAnalytics&&!G?.email_only&&(0,L.jsx)(`div`,{className:`mr-3 flex grow items-center gap-2 md:grow-0`,children:(0,L.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground`,title:`Active readers in the last 5 minutes · Updates every 60 seconds`,children:[(0,L.jsxs)(`span`,{children:[Q?``:oe(Z),` reading now`]}),(0,L.jsx)(`div`,{className:`size-2 rounded-full ${Q?`animate-pulse bg-muted`:Z?`bg-green-500`:`border border-muted-foreground`}`})]})}),!K&&(0,L.jsxs)(L.Fragment,{children:[!G?.email_only&&(0,L.jsx)(M,{author:G?.authors?.[0]?.name||``,canShareAsGift:J,description:``,faviconURL:W?.icon||``,featureImageURL:G?.feature_image,giftAccessLabel:P(G?.visibility),open:V,postExcerpt:G?.excerpt||``,postTitle:G?.title,postURL:G?.url,siteTitle:W?.title||``,onClose:()=>H(!1),onOpenChange:H,onShareAsGift:()=>{H(!1),U(!0)},children:(0,L.jsxs)(h,{variant:`outline`,onClick:()=>H(!0),children:[(0,L.jsx)(D,{}),` Share`]})}),(0,L.jsxs)(ge,{children:[(0,L.jsx)(C,{asChild:!0,children:(0,L.jsx)(h,{variant:`outline`,children:(0,L.jsx)(_e,{})})}),(0,L.jsxs)(v,{align:`end`,children:[(0,L.jsxs)(y,{children:[(0,L.jsx)(g,{asChild:!0,children:(0,L.jsxs)(`a`,{href:G?.url,rel:`noopener noreferrer`,target:`_blank`,children:[(0,L.jsx)(me,{}),`View in browser`]})}),(0,L.jsxs)(g,{onClick:()=>{n(`/editor/post/${q}`,{crossApp:!0})},children:[(0,L.jsx)(pe,{}),`Edit post`]})]}),(0,L.jsx)(E,{}),(0,L.jsx)(y,{children:(0,L.jsxs)(g,{className:`text-destructive focus:text-destructive`,onClick:Se,children:[(0,L.jsx)(he,{}),`Delete post`]})})]})]})]})]})]}),!K&&(0,L.jsxs)(`div`,{className:`flex items-start gap-6 md:items-center`,children:[G?.feature_image&&(0,L.jsx)(`div`,{className:`aspect-[16/10] w-full max-w-[100px] rounded-md bg-cover bg-center md:max-w-[132px]`,style:{backgroundImage:`url(${G.feature_image})`}}),(0,L.jsxs)(`div`,{children:[(0,L.jsx)(fe,{className:`-ml-px max-w-[920px] indent-0 !text-xl md:leading-[1.2em]`,"data-header":`header-title`,children:G?.title}),G?.published_at&&(0,L.jsxs)(`div`,{className:`mt-0.5 flex items-center justify-start leading-[1.65em] text-muted-foreground`,children:[ie(G)&&`Sent on ${d(G.published_at,Y)} at ${f(G.published_at,Y)}`,s(G)&&`Published on your site on ${d(G.published_at,Y)} at ${f(G.published_at,Y)}`,l(G)&&`Published and sent on ${d(G.published_at,Y)} at ${f(G.published_at,Y)}`]})]})]})]})})}),(0,L.jsxs)(ee,{className:`sticky top-0 z-50 -mb-8 transform-gpu flex-col items-start gap-y-0 border-none bg-white/70 py-8 backdrop-blur-md lg:flex-row lg:items-center dark:bg-background`,children:[!K&&(0,L.jsxs)(te,{className:`min-h-[34px]`,defaultValue:e,responsive:!0,children:[$.includes(`Overview`)&&(0,L.jsx)(a,{value:`Overview`,onClick:()=>{n(`/posts/analytics/${q}`)},children:`Overview`}),$.includes(`Web`)&&(0,L.jsx)(a,{value:`Web`,onClick:()=>{n(`/posts/analytics/${q}/web`)},children:`Web traffic`}),$.includes(`Newsletter`)&&(0,L.jsx)(a,{value:`Newsletter`,onClick:()=>{n(`/posts/analytics/${q}/newsletter`)},children:`Newsletter`}),$.includes(`Growth`)&&(0,L.jsx)(a,{value:`Growth`,onClick:()=>{n(`/posts/analytics/${q}/growth`)},children:`Growth`})]}),t]}),J&&q&&(0,L.jsx)(F,{open:ye,postId:q,source:`share-modal`,onOpenChange:U},q),(0,L.jsx)(k,{open:R,onOpenChange:B,children:(0,L.jsxs)(A,{children:[(0,L.jsxs)(O,{children:[(0,L.jsx)(T,{children:`Are you sure you want to delete this post?`}),(0,L.jsxs)(x,{children:[`You're about to delete "`,(0,L.jsx)(`strong`,{children:G?.title}),`". This is permanent! We warned you, k?`]})]}),(0,L.jsxs)(S,{children:[(0,L.jsx)(w,{children:`Cancel`}),(0,L.jsx)(b,{className:`bg-red-600 text-white hover:bg-red-700`,onClick:()=>void Ce(),children:`Delete`})]})]})})]})};export{z as n,R as r,B as t};