ghost 6.17.2 → 6.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/components/{tryghost-i18n-6.17.2.tgz → tryghost-i18n-6.18.1.tgz} +0 -0
  2. package/components/{tryghost-parse-email-address-6.17.2.tgz → tryghost-parse-email-address-6.18.1.tgz} +0 -0
  3. package/core/built/admin/assets/{PolarAngleAxis-B8JrAxf_.js → PolarAngleAxis-Dod0DwfL.js} +1 -1
  4. package/core/built/admin/assets/{_baseAssignValue-Bbalamaq.js → _baseAssignValue-DnkbkowM.js} +1 -1
  5. package/core/built/admin/assets/{a-large-small-CgWPeKpi.js → a-large-small-C5mgFBRg.js} +1 -1
  6. package/core/built/admin/assets/activitypub/activitypub.js +1 -1
  7. package/core/built/admin/assets/activitypub/{at-sign-Fsk3x72r.mjs → at-sign-BR2C2gdz.mjs} +2 -2
  8. package/core/built/admin/assets/activitypub/{avatar-flipboard-C10JfFS_.mjs → avatar-flipboard-CJV3KhLU.mjs} +2 -2
  9. package/core/built/admin/assets/activitypub/{bluesky-sharing-C1xeGSL6.mjs → bluesky-sharing-DY4KCGPZ.mjs} +4 -4
  10. package/core/built/admin/assets/activitypub/{copy-C1fElSkQ.mjs → copy-CBFwbAdE.mjs} +2 -2
  11. package/core/built/admin/assets/activitypub/{deleted-feed-item-Bun4tY2_.mjs → deleted-feed-item-DOm9GxTQ.mjs} +2 -2
  12. package/core/built/admin/assets/activitypub/{edit-profile-CYh00FZ7.mjs → edit-profile-CcbnZWkM.mjs} +3 -3
  13. package/core/built/admin/assets/activitypub/{feed-BxUqmcN9.mjs → feed-BHiZU0Q_.mjs} +4 -4
  14. package/core/built/admin/assets/activitypub/{hash-CNgwAx-U.mjs → hash-Csjloy5t.mjs} +2 -2
  15. package/core/built/admin/assets/activitypub/{inbox-DqNqII4a.mjs → inbox-DGKbBux9.mjs} +2 -2
  16. package/core/built/admin/assets/activitypub/{index-CONoLlDU.mjs → index-Bt_qFJNY.mjs} +2 -2
  17. package/core/built/admin/assets/activitypub/{index--Q6orQkb.mjs → index-CCYuVHjm.mjs} +21 -21
  18. package/core/built/admin/assets/activitypub/{index-jhjmoHwu.mjs → index-CTV39jCH.mjs} +2 -2
  19. package/core/built/admin/assets/activitypub/{index-Dvh9q3jy.mjs → index-ClNx7qzi.mjs} +4 -4
  20. package/core/built/admin/assets/activitypub/{index-C9pnotJK.mjs → index-D6Y6ywyl.mjs} +6 -6
  21. package/core/built/admin/assets/activitypub/{index-BueIufRq.mjs → index-YLvIz6pJ.mjs} +5 -5
  22. package/core/built/admin/assets/activitypub/{index-C3KJXzZE.mjs → index-tWANcGjH.mjs} +7 -7
  23. package/core/built/admin/assets/activitypub/{index-CJJXnqq1.mjs → index-vVqFEPIX.mjs} +3 -3
  24. package/core/built/admin/assets/activitypub/{moderation-CYhwUFi2.mjs → moderation-CUGqRfT1.mjs} +3 -3
  25. package/core/built/admin/assets/activitypub/{note-COVa8CMw.mjs → note-DMy39JHG.mjs} +4 -4
  26. package/core/built/admin/assets/activitypub/{reply-BHpKVBxx.mjs → reply-BboFcDsv.mjs} +2 -2
  27. package/core/built/admin/assets/activitypub/{separator-DP7q5sFH.mjs → separator-DBvIXQnV.mjs} +2 -2
  28. package/core/built/admin/assets/activitypub/{settings-3n7zo_3K.mjs → settings-D4qRhs9E.mjs} +3 -3
  29. package/core/built/admin/assets/activitypub/{step-1-BmUukywZ.mjs → step-1-C-ubwwIT.mjs} +3 -3
  30. package/core/built/admin/assets/activitypub/{step-2-C--I3xxp.mjs → step-2-Dsd2XY1_.mjs} +5 -5
  31. package/core/built/admin/assets/activitypub/{step-3-0Deh5N9c.mjs → step-3-BHz3ow0t.mjs} +7 -7
  32. package/core/built/admin/assets/activitypub/{tabs-D_vmoLBo.mjs → tabs-s_P4XeyF.mjs} +3 -3
  33. package/core/built/admin/assets/activitypub/{topic-filter-DJMrhH-c.mjs → topic-filter-CCf15CR-.mjs} +2 -2
  34. package/core/built/admin/assets/admin-x-settings/admin-x-settings.js +1 -1
  35. package/core/built/admin/assets/admin-x-settings/{code-editor-view-BzvYs1fs.mjs → code-editor-view-BWi3-ftq.mjs} +2 -2
  36. package/core/built/admin/assets/admin-x-settings/{index-DdMo_pvD.mjs → index-B3PtvbUw.mjs} +2 -2
  37. package/core/built/admin/assets/admin-x-settings/{index-DYEF3NiM.mjs → index-Did70N9h.mjs} +2 -2
  38. package/core/built/admin/assets/admin-x-settings/{index-BXChUyr6.mjs → index-JaMlaX9G.mjs} +30 -19
  39. package/core/built/admin/assets/admin-x-settings/{modals-Ck3AHDx3.mjs → modals-Bwrf9ptQ.mjs} +8060 -8067
  40. package/core/built/admin/assets/{at-sign-BottTo2X.js → at-sign-Bz-SU-S_.js} +1 -1
  41. package/core/built/admin/assets/{audience-CcGOt5Fb.js → audience-DmVdEmIe.js} +1 -1
  42. package/core/built/admin/assets/{avatar-flipboard-MxW2k124.js → avatar-flipboard-C7sxDVEM.js} +1 -1
  43. package/core/built/admin/assets/{bluesky-sharing-BBmDBlxr.js → bluesky-sharing-DJniSF6N.js} +1 -1
  44. package/core/built/admin/assets/{chart-pimL5Chk.js → chart-mYz3IJwm.js} +1 -1
  45. package/core/built/admin/assets/{chunk.524.9a8f5123fd3ecf3e4451.js → chunk.524.9d300778a63b42b0de62.js} +7 -7
  46. package/core/built/admin/assets/{chunk.582.41886d06af2895d571bd.js → chunk.582.2e363cd976d9bba998b9.js} +10 -10
  47. package/core/built/admin/assets/{code-editor-view-tCZOpc_h.js → code-editor-view-BIQWFJ01.js} +1 -1
  48. package/core/built/admin/assets/comments-B_-hdjc6.js +1 -0
  49. package/core/built/admin/assets/{copy-aC0WUVtq.js → copy-Bpq3uhnh.js} +1 -1
  50. package/core/built/admin/assets/{data-list-BOdyZGWI.js → data-list-BYNMbRIq.js} +1 -1
  51. package/core/built/admin/assets/{deleted-feed-item-BnUJ8bWP.js → deleted-feed-item-B_AwUKZy.js} +1 -1
  52. package/core/built/admin/assets/{edit-profile-CEgPhWMJ.js → edit-profile-DZo2ZcOu.js} +1 -1
  53. package/core/built/admin/assets/{empty-indicator-CR_9BHAH.js → empty-indicator-Bn5wG9-T.js} +1 -1
  54. package/core/built/admin/assets/{en-ajofhc7o.js → en-D4zIrMLN.js} +1 -1
  55. package/core/built/admin/assets/{feed-Ci-ODCHE.js → feed-Bgq4RarU.js} +1 -1
  56. package/core/built/admin/assets/{filters-CmJJOv3I.js → filters-CpVwu1Gk.js} +1 -1
  57. package/core/built/admin/assets/{gh-chart-hn7wEnik.js → gh-chart-Br7NXn_b.js} +1 -1
  58. package/core/built/admin/assets/{ghost-78b420974adc056bf1c9570275a46535.css → ghost-3c48d37b32f4fcd7eb15cfd739905a03.css} +1 -1
  59. package/core/built/admin/assets/{ghost-a9268074d0a9b02198594a05ecd7a626.js → ghost-98a3c5fd6235ebd344594f491cb6d17b.js} +241 -246
  60. package/core/built/admin/assets/{ghost-dark-12abca67e79c76fe6bfed6cb81ba2a53.css → ghost-dark-0100fe3ec7b4c3f6d8d043c904254a63.css} +1 -1
  61. package/core/built/admin/assets/{growth-CQceZQ1g.js → growth-CiPDnWxJ.js} +1 -1
  62. package/core/built/admin/assets/{hash-BcaWmkw5.js → hash-Bc1e38oH.js} +1 -1
  63. package/core/built/admin/assets/{inbox-D9hID-rO.js → inbox-BcZNBNhk.js} +1 -1
  64. package/core/built/admin/assets/{index-d_UH71zm.js → index-BFEx_ouC.js} +1 -1
  65. package/core/built/admin/assets/{index-kXF42nga.js → index-B_7QsC5T.js} +1 -1
  66. package/core/built/admin/assets/{index-CZ3lARQ2.js → index-Bm5ZeLtt.js} +1 -1
  67. package/core/built/admin/assets/{index-DJDgMk-T.js → index-BpcL7RmI.js} +2 -2
  68. package/core/built/admin/assets/{index-g4BWcHhl.js → index-Brg4tecQ.js} +1 -1
  69. package/core/built/admin/assets/{index-f5Lv9kLb.js → index-CMTzNTew.js} +29 -29
  70. package/core/built/admin/assets/{index-Cl2eSBwg.js → index-CTfJflJ2.js} +1 -1
  71. package/core/built/admin/assets/{index-BJS8H75W.js → index-Cn32t_gv.js} +1 -1
  72. package/core/built/admin/assets/{index-D8syEvSm.js → index-CsidX7Si.js} +1 -1
  73. package/core/built/admin/assets/{index-DO76vL0R.js → index-D212VvOz.js} +1 -1
  74. package/core/built/admin/assets/{index-B1rKIiOr.js → index-D67LJ_H4.js} +1 -1
  75. package/core/built/admin/assets/{index-BmK6ThYl.js → index-DU3bv9jz.js} +1 -1
  76. package/core/built/admin/assets/{index-DYM1MbXR.js → index-Dv13wKfX.js} +1 -1
  77. package/core/built/admin/assets/{index-Do091GLu.js → index-ETsoQLbU.js} +1 -1
  78. package/core/built/admin/assets/{index-rluYcfd-.js → index-ZYDRMgcT.js} +1 -1
  79. package/core/built/admin/assets/{koenig-lexical-D2XHvS2J.js → koenig-lexical-DZUWzN0P.js} +1 -1
  80. package/core/built/admin/assets/{kpi-card-Dga9rFZ5.js → kpi-card-DENsK2xK.js} +1 -1
  81. package/core/built/admin/assets/{kpis-BbnqD1za.js → kpis-CDrs2iS1.js} +1 -1
  82. package/core/built/admin/assets/{label-D8WHEOe0.js → label-BznQtEEo.js} +1 -1
  83. package/core/built/admin/assets/{links-dgwx7ko1.js → links-lpAC3T1p.js} +1 -1
  84. package/core/built/admin/assets/{lucide-react-BARFK2PZ.js → lucide-react-CBigk-fq.js} +1 -1
  85. package/core/built/admin/assets/{main-layout-CcjtCuF_.js → main-layout-_SYQRjIl.js} +1 -1
  86. package/core/built/admin/assets/{message-square-text-BxquqPhA.js → message-square-text-cV8O_qKq.js} +1 -1
  87. package/core/built/admin/assets/{minus-Ziy4LSYD.js → minus-NvnQTlW7.js} +1 -1
  88. package/core/built/admin/assets/{modals-fMQzR7L6.js → modals-XRSkribf.js} +3 -3
  89. package/core/built/admin/assets/{moderation-Ci9UNwiZ.js → moderation-BQp1GEWG.js} +1 -1
  90. package/core/built/admin/assets/{newsletter-DnrS7Fvi.js → newsletter-foM6KNNV.js} +1 -1
  91. package/core/built/admin/assets/{newsletters-D78pgnas.js → newsletters-BexdXUhn.js} +1 -1
  92. package/core/built/admin/assets/{note-BAfNweZN.js → note-DuaUGOeZ.js} +1 -1
  93. package/core/built/admin/assets/{overview-CWQPNOF0.js → overview-DgKBNqyc.js} +1 -1
  94. package/core/built/admin/assets/{pagemenu-DjSqq3Wu.js → pagemenu-CZyroidv.js} +1 -1
  95. package/core/built/admin/assets/{post-analytics-c8kRV0YB.js → post-analytics-DLK2SOSQ.js} +1 -1
  96. package/core/built/admin/assets/{post-analytics-context-CEqWyqgm.js → post-analytics-context-CF7C67-0.js} +1 -1
  97. package/core/built/admin/assets/{post-analytics-header-CpPPBAz4.js → post-analytics-header-7GtJCx0W.js} +1 -1
  98. package/core/built/admin/assets/{post-share-modal-Dln0kZhn.js → post-share-modal-D8R7DUZP.js} +1 -1
  99. package/core/built/admin/assets/posts/{comments-CHEqbZPq.mjs → comments-Bn_vn_sb.mjs} +434 -407
  100. package/core/built/admin/assets/posts/{dialog-VFomJYla.mjs → dialog-CKPcMrj7.mjs} +3 -3
  101. package/core/built/admin/assets/posts/{empty-indicator-CT9qQsMO.mjs → empty-indicator-kkrhP6K_.mjs} +2 -2
  102. package/core/built/admin/assets/posts/{filters-BXCfSKKS.mjs → filters-DHsxxy0F.mjs} +6 -6
  103. package/core/built/admin/assets/posts/{growth-xMitvyvt.mjs → growth-D7ACh-oR.mjs} +12 -12
  104. package/core/built/admin/assets/posts/{heading-DIulQwgD.mjs → heading-BrKVbOxA.mjs} +2 -2
  105. package/core/built/admin/assets/posts/{hooks-BiBMDYOA.mjs → hooks-BBEMuLiW.mjs} +3 -3
  106. package/core/built/admin/assets/posts/{index-uYyMBANY.mjs → index-C0rRguZx.mjs} +9 -9
  107. package/core/built/admin/assets/posts/{kpis-DK6j0CJA.mjs → kpis-1o524OIK.mjs} +10 -10
  108. package/core/built/admin/assets/posts/{links-CBiYZsyk.mjs → links-JpeATx1f.mjs} +4 -4
  109. package/core/built/admin/assets/posts/{loading-indicator-BPPeKpVb.mjs → loading-indicator-BHAmSf8j.mjs} +3 -3
  110. package/core/built/admin/assets/posts/{main-layout-f-PcNn-6.mjs → main-layout-BTItAOQE.mjs} +2 -2
  111. package/core/built/admin/assets/posts/{newsletter-CSOyAfvO.mjs → newsletter-CQdsCEHv.mjs} +13 -13
  112. package/core/built/admin/assets/posts/{overview-Dve3Uxt4.mjs → overview-sYh4JN1D.mjs} +15 -15
  113. package/core/built/admin/assets/posts/{post-analytics-CPKxH7yg.mjs → post-analytics-DtLt2SWx.mjs} +6 -6
  114. package/core/built/admin/assets/posts/{post-analytics-context-B5zQoflZ.mjs → post-analytics-context-CB1yM9fk.mjs} +4 -4
  115. package/core/built/admin/assets/posts/{post-analytics-header-BBxuaptK.mjs → post-analytics-header-BYaWuL9W.mjs} +9 -9
  116. package/core/built/admin/assets/posts/{post-share-modal-D_iMXvnI.mjs → post-share-modal-V0HTOBaf.mjs} +4 -4
  117. package/core/built/admin/assets/posts/{posts-DW6ne0od.mjs → posts-DeQT3knv.mjs} +2 -2
  118. package/core/built/admin/assets/posts/posts.js +1 -1
  119. package/core/built/admin/assets/posts/{search-CVlPqGMA.mjs → search-CLjC37AT.mjs} +2 -2
  120. package/core/built/admin/assets/posts/{separator-YrJkDGVP.mjs → separator-KNoTIaJx.mjs} +5 -5
  121. package/core/built/admin/assets/posts/{sheet-T5GWxxrn.mjs → sheet-DBg_SCDt.mjs} +3 -3
  122. package/core/built/admin/assets/posts/{skeleton-qnvlkDy-.mjs → skeleton-DvsoolWu.mjs} +3 -3
  123. package/core/built/admin/assets/posts/{source-icon-DBU0eZwS.mjs → source-icon-OmRaTU2G.mjs} +3 -3
  124. package/core/built/admin/assets/posts/{stats-udwJVZP8.mjs → stats-BC2DzntY.mjs} +4 -4
  125. package/core/built/admin/assets/posts/{table-Cu0BZfBU.mjs → table-CxX9OKAj.mjs} +2 -2
  126. package/core/built/admin/assets/posts/{tabs-B-RaoD3I.mjs → tabs-B1jw7cBi.mjs} +10 -10
  127. package/core/built/admin/assets/posts/{tags-DSDGzArh.mjs → tags-BBilTo1a.mjs} +11 -11
  128. package/core/built/admin/assets/posts/{tags-DByfrDKO.mjs → tags-BitrLT_j.mjs} +2 -2
  129. package/core/built/admin/assets/posts/{use-infinite-virtual-scroll-B7dD2nWW.mjs → use-infinite-virtual-scroll-DaijA1ao.mjs} +3 -3
  130. package/core/built/admin/assets/posts/{web-B9wvEtJ_.mjs → web-CKmyC4Xj.mjs} +15 -15
  131. package/core/built/admin/assets/{posts-C1Eh5Ypq.js → posts-CL9UDYoW.js} +1 -1
  132. package/core/built/admin/assets/{repeat-CN4fiG5H.js → repeat-DgH39UKE.js} +1 -1
  133. package/core/built/admin/assets/{reply-BfWgvH7y.js → reply-DAaNxiy8.js} +1 -1
  134. package/core/built/admin/assets/{select-B_0NBkLz.js → select-Cor2wFXT.js} +1 -1
  135. package/core/built/admin/assets/{settings-BqaVcJee.js → settings-BeumESEN.js} +5 -5
  136. package/core/built/admin/assets/{settings-Dk9E7Fqv.js → settings-xRx917Gj.js} +1 -1
  137. package/core/built/admin/assets/{sort-button-C2M35dLh.js → sort-button-BNW3i4Lb.js} +1 -1
  138. package/core/built/admin/assets/{source-icon-DkGi13e_.js → source-icon-DvDuzw73.js} +1 -1
  139. package/core/built/admin/assets/{sprout-BKiwQsGn.js → sprout-C3cc0c-K.js} +1 -1
  140. package/core/built/admin/assets/{square-BEpRc_fY.js → square-tZp0_n7e.js} +1 -1
  141. package/core/built/admin/assets/stats/{audience-Dfo7BmNu.mjs → audience-BWqU7WWT.mjs} +3 -3
  142. package/core/built/admin/assets/stats/{index-DUWoiDE_.mjs → index-CUuQaROI.mjs} +5 -5
  143. package/core/built/admin/assets/stats/{index-Yo58temM.mjs → index-CcCyLMxL.mjs} +7 -7
  144. package/core/built/admin/assets/stats/{index-h0rsyxDz.mjs → index-D5mlMG4l.mjs} +8 -8
  145. package/core/built/admin/assets/stats/{index-_vL3Zubi.mjs → index-DXU2rE9t.mjs} +5 -5
  146. package/core/built/admin/assets/stats/{index-Banm1wtA.mjs → index-K7ASx7EG.mjs} +6 -6
  147. package/core/built/admin/assets/stats/{sort-button-i6PS-TUn.mjs → sort-button-CELUx6Zp.mjs} +3 -3
  148. package/core/built/admin/assets/stats/{stats-CjepXEWS.mjs → stats-d_u_in4l.mjs} +2 -2
  149. package/core/built/admin/assets/stats/stats.js +2 -2
  150. package/core/built/admin/assets/stats/{tabs-Q20S1oup.mjs → tabs-3wLZsy0v.mjs} +3 -3
  151. package/core/built/admin/assets/stats/{url-helpers-DrGoeEH1.mjs → url-helpers-Drq3xg0l.mjs} +4 -4
  152. package/core/built/admin/assets/stats/{use-growth-stats-BnffY2W3.mjs → use-growth-stats-28Sr42va.mjs} +3 -3
  153. package/core/built/admin/assets/{stats-CRgy_cWm.js → stats-2Jelnn-Q.js} +1 -1
  154. package/core/built/admin/assets/{stats-view-CTQ4qO3S.js → stats-view-CESy8ELH.js} +1 -1
  155. package/core/built/admin/assets/{step-1-CNbdmB8C.js → step-1-DrqdolAh.js} +1 -1
  156. package/core/built/admin/assets/{step-2-Ddrl2uae.js → step-2-DmEpKck5.js} +1 -1
  157. package/core/built/admin/assets/{step-3-CbqkEtwh.js → step-3-Bus-0o0n.js} +1 -1
  158. package/core/built/admin/assets/{table-Dw9xFlFd.js → table-BQUcKHfm.js} +1 -1
  159. package/core/built/admin/assets/{tabs-DCHagOip.js → tabs-BmdL0X4U.js} +1 -1
  160. package/core/built/admin/assets/{tags-DV2SSdMK.js → tags-CLxXZlOO.js} +1 -1
  161. package/core/built/admin/assets/{tags-BsDlfsPN.js → tags-EchqlZUJ.js} +1 -1
  162. package/core/built/admin/assets/{tiers-tc5tafWV.js → tiers-nCGyTly9.js} +1 -1
  163. package/core/built/admin/assets/{toggle-group-DS-ZVhCr.js → toggle-group-CM5uf7J1.js} +1 -1
  164. package/core/built/admin/assets/{topic-filter-BfoEqHRD.js → topic-filter-LTRvZ8aU.js} +1 -1
  165. package/core/built/admin/assets/{trash-CpnxYen-.js → trash-u5BxolyH.js} +1 -1
  166. package/core/built/admin/assets/{url-helpers-wKPPeCtD.js → url-helpers-D41fEt51.js} +1 -1
  167. package/core/built/admin/assets/{use-growth-stats-CbHIETF_.js → use-growth-stats-BJ0O9ewi.js} +1 -1
  168. package/core/built/admin/assets/{use-infinite-virtual-scroll-DU1EUhyj.js → use-infinite-virtual-scroll-APZWciOk.js} +1 -1
  169. package/core/built/admin/assets/{use-simple-pagination-X6kmRz2u.js → use-simple-pagination-DVRHeaAR.js} +1 -1
  170. package/core/built/admin/assets/{user-round-check-DYkrjHxF.js → user-round-check-B6j98D6d.js} +1 -1
  171. package/core/built/admin/assets/{wallet-cards-CSdWOmJE.js → wallet-cards-KmOh29LP.js} +1 -1
  172. package/core/built/admin/assets/{web-C39IKnvl.js → web-Cclotbnz.js} +1 -1
  173. package/core/built/admin/index.html +5 -5
  174. package/core/frontend/meta/asset-url.js +126 -15
  175. package/core/frontend/services/asset-hash/index.js +73 -0
  176. package/core/frontend/services/theme-engine/active.js +4 -2
  177. package/core/server/api/endpoints/utils/serializers/output/utils/post-gating.js +6 -0
  178. package/core/server/data/migrations/versions/6.17/2026-02-04-10-42-20-offers-nullable-product-id.js +11 -0
  179. package/core/server/data/migrations/versions/6.18/2026-02-04-10-42-20-offers-nullable-product-id.js +4 -0
  180. package/core/server/data/schema/schema.js +1 -1
  181. package/core/server/data/tinybird/datasources/_mv_daily_pages.datasource +13 -0
  182. package/core/server/data/tinybird/endpoints/api_top_pages_v3.pipe +113 -0
  183. package/core/server/data/tinybird/pipes/mv_daily_pages.pipe +23 -0
  184. package/core/server/data/tinybird/scripts/benchmark-top-pages.sh +186 -0
  185. package/core/server/data/tinybird/scripts/compare-top-pages.sh +262 -0
  186. package/core/server/data/tinybird/tests/api_top_pages_v3.yaml +112 -0
  187. package/core/server/models/automated-email.js +34 -0
  188. package/core/server/services/koenig/node-renderers/transistor-renderer.js +3 -8
  189. package/core/server/services/lib/member-signup-contexts.js +23 -0
  190. package/core/server/services/lib/member-signup-contexts.ts +22 -0
  191. package/core/server/services/member-welcome-emails/member-welcome-email-renderer.js +13 -7
  192. package/core/server/services/member-welcome-emails/service.js +84 -15
  193. package/core/server/services/members/members-api/controllers/router-controller.js +14 -0
  194. package/core/server/services/members/members-api/repositories/member-repository.js +1 -1
  195. package/core/server/services/members/members-api/services/payments-service.js +5 -0
  196. package/core/server/services/oembed/oembed-service.js +1 -1
  197. package/core/server/services/offers/application/offer-mapper.js +6 -7
  198. package/core/server/services/offers/application/offers-api.js +3 -3
  199. package/core/server/services/offers/domain/errors/index.js +2 -0
  200. package/core/server/services/offers/domain/models/offer.js +15 -3
  201. package/core/server/services/offers/offer-bookshelf-repository.js +4 -5
  202. package/core/server/services/stats/utils/tinybird.js +5 -3
  203. package/core/server/services/stripe/services/webhook/checkout-session-event-service.js +17 -1
  204. package/core/server/services/stripe/stripe-service.js +8 -0
  205. package/core/shared/config/defaults.json +6 -0
  206. package/core/shared/labs.js +3 -3
  207. package/core/shared/url-utils.js +2 -1
  208. package/package.json +6 -6
  209. package/tsconfig.tsbuildinfo +1 -1
  210. package/yarn.lock +23 -2
  211. package/core/built/admin/assets/comments-OXqhcC0t.js +0 -1
package/yarn.lock CHANGED
@@ -18594,7 +18594,7 @@ escodegen@^1.8.1:
18594
18594
  optionalDependencies:
18595
18595
  source-map "~0.6.1"
18596
18596
 
18597
- escodegen@^2.0.0:
18597
+ escodegen@^2.0.0, escodegen@^2.1.0:
18598
18598
  version "2.1.0"
18599
18599
  resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17"
18600
18600
  integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==
@@ -18986,6 +18986,11 @@ esprima@1.2.2:
18986
18986
  resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.2.tgz#76a0fd66fcfe154fd292667dc264019750b1657b"
18987
18987
  integrity sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==
18988
18988
 
18989
+ esprima@1.2.5:
18990
+ version "1.2.5"
18991
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.5.tgz#0993502feaf668138325756f30f9a51feeec11e9"
18992
+ integrity sha512-S9VbPDU0adFErpDai3qDkjq8+G05ONtKzcyNrPKg/ZKa+tf879nX2KexNU95b31UoTJjRLInNBHHHjFPoCd7lQ==
18993
+
18989
18994
  esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0:
18990
18995
  version "4.0.1"
18991
18996
  resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
@@ -23450,6 +23455,15 @@ jsonpath@1.1.1:
23450
23455
  static-eval "2.0.2"
23451
23456
  underscore "1.12.1"
23452
23457
 
23458
+ jsonpath@1.2.1:
23459
+ version "1.2.1"
23460
+ resolved "https://registry.yarnpkg.com/jsonpath/-/jsonpath-1.2.1.tgz#2b74a4bcc78948e43e33ac971138ce0c68bce701"
23461
+ integrity sha512-Jl6Jhk0jG+kP3yk59SSeGq7LFPR4JQz1DU0K+kXTysUhMostbhU3qh5mjTuf0PqFcXpAT7kvmMt9WxV10NyIgQ==
23462
+ dependencies:
23463
+ esprima "1.2.5"
23464
+ static-eval "2.1.1"
23465
+ underscore "1.13.6"
23466
+
23453
23467
  jsonwebtoken@8.5.1:
23454
23468
  version "8.5.1"
23455
23469
  resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d"
@@ -31358,6 +31372,13 @@ static-eval@2.0.2:
31358
31372
  dependencies:
31359
31373
  escodegen "^1.8.1"
31360
31374
 
31375
+ static-eval@2.1.1:
31376
+ version "2.1.1"
31377
+ resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-2.1.1.tgz#71ac6a13aa32b9e14c5b5f063c362176b0d584ba"
31378
+ integrity sha512-MgWpQ/ZjGieSVB3eOJVs4OA2LT/q1vx98KPCTTQPzq/aLr0YUXTsgryTXr4SLfR0ZfUUCiedM9n/ABeDIyy4mA==
31379
+ dependencies:
31380
+ escodegen "^2.1.0"
31381
+
31361
31382
  static-extend@^0.1.1:
31362
31383
  version "0.1.2"
31363
31384
  resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
@@ -33128,7 +33149,7 @@ underscore@1.12.1:
33128
33149
  resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e"
33129
33150
  integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==
33130
33151
 
33131
- underscore@>=1.8.3:
33152
+ underscore@1.13.6, underscore@>=1.8.3:
33132
33153
  version "1.13.6"
33133
33154
  resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441"
33134
33155
  integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==
@@ -1 +0,0 @@
1
- import{r as h,j as e,y as N,$ as we,cV as te,cW as Ce,bK as H,cz as ke,cX as ye,X as _e,cY as Se,B as b,be as Pe,ak as Te,ad as ae,ae as B,b_ as D,b$ as $,c0 as F,c1 as E,cy as L,cK as Le,D as O,t as U,v as V,w as q,a9 as Me,aa as A,cZ as Re,c_ as Ie,bH as ze,ap as De,bN as $e,bI as Fe,bJ as T,x as X,c$ as Ee,f as M,bq as re,bG as R,aj as He,z as Q,by as Be,bA as Oe,bB as Ue,bC as Ve,aR as qe,d0 as ne,ck as Ae,aI as Qe}from"./index-f5Lv9kLb.js";import{F as We,c as Ke}from"./filters-CmJJOv3I.js";import{u as Ge,g as Ye}from"./posts-C1Eh5Ypq.js";import{M as Xe,b as W,a as Je,F as Ze,d as es,C as ss,e as ie,D as K,E as le,f as oe}from"./message-square-text-BxquqPhA.js";import{H as J,g as ts,u as as}from"./use-infinite-virtual-scroll-DU1EUhyj.js";import{M as rs}from"./main-layout-CcjtCuF_.js";import{C as ce,a as ns}from"./index-g4BWcHhl.js";import{L as is}from"./label-D8WHEOe0.js";import{R as ls}from"./reply-BfWgvH7y.js";import{E as de}from"./empty-indicator-CR_9BHAH.js";const me=h.forwardRef(({className:s,...t},a)=>e.jsx(ce,{ref:a,className:N("grid place-content-center peer h-4 w-4 shrink-0 rounded-sm border border-primary shadow focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",s),...t,children:e.jsx(ns,{className:N("grid place-content-center text-current"),children:e.jsx(we,{className:"size-4"})})}));me.displayName=ce.displayName;const os=({children:s,className:t,...a})=>e.jsx("section",{className:N("flex gap-6 flex-col p-4 lg:p-8 size-full grow",t),...a,children:s});function Z({knownItems:s,useSearch:t,useGetById:a,filters:r,filterFieldName:n,searchFieldName:o,toOption:c}){const[i,l]=h.useState(""),{data:d,isLoading:u}=t(i),x=h.useMemo(()=>{const v=r.find(f=>f.field===n);return v?.values[0]?String(v.values[0]):""},[r,n]),p=h.useMemo(()=>!x||s.some(f=>f.id===x)?!1:!(d?.[o]??[]).some(f=>f.id===x),[x,s,d,o]),{data:g,isLoading:w}=a(x||"",{enabled:p,defaultErrorHandler:!1}),y=u||w,C=h.useCallback(v=>c(v),[c]);return{options:h.useMemo(()=>{const v=d?.[o]??[],f={};for(const j of s)f[j.id]=C(j);for(const j of v)f[j.id]=C(j);const S=g?.[o]?.[0];return S?.id&&(f[S.id]=C(S)),x&&!(x in f)&&(f[x]={value:x,label:`ID: ${x}`}),Object.values(f)},[s,d,o,g,x,C]),isLoading:y,searchValue:i,onSearchChange:l}}function cs(s){const[t]=te(s,200);return Ce({searchParams:{...t&&{search:t},limit:"100",order:"created_at DESC"}})}function ds(s){const[t]=te(s,200),a=t?`title:~'${t.replace(/'/g,"\\'")}'`:"";return Ge({searchParams:{...a&&{filter:a},limit:"100",fields:"id,title",order:"published_at DESC"}})}const ms=({knownPosts:s,knownMembers:t,filters:a,onFiltersChange:r})=>{const n=Z({knownItems:s,useSearch:ds,useGetById:Ye,searchFieldName:"posts",filters:a,filterFieldName:"post",toOption:d=>({value:d.id,label:d.title||"(Untitled)"})}),o=Z({knownItems:t,useSearch:cs,useGetById:Se,searchFieldName:"members",filters:a,filterFieldName:"author",toOption:d=>({value:d.id,label:d.name||"Unknown name",detail:d.email??"(Unknown email)"})}),c=h.useMemo(()=>[{key:"author",label:"Author",type:"select",icon:e.jsx(H,{className:"size-4"}),options:o.options,isLoading:o.options.length===0&&o.isLoading,onSearchChange:o.onSearchChange,searchValue:o.searchValue,searchable:!0,className:"w-80",popoverContentClassName:"w-80",operators:[{value:"is",label:"is"},{value:"is_not",label:"is not"}]},{key:"post",label:"Post",type:"select",icon:e.jsx(ke,{className:"size-4"}),options:n.options,isLoading:n.options.length===0&&n.isLoading,onSearchChange:n.onSearchChange,searchValue:n.searchValue,searchable:!0,className:"w-full max-w-80",popoverContentClassName:"w-full max-w-[calc(100vw-32px)] max-w-80",operators:[{value:"is",label:"is"},{value:"is_not",label:"is not"}]},{key:"body",label:"Text",type:"text",icon:e.jsx(Xe,{className:"size-4"}),placeholder:"Search comment text...",operators:[{value:"contains",label:"contains"},{value:"not_contains",label:"does not contain"}],defaultOperator:"contains",className:"w-full max-w-48",popoverContentClassName:"w-full max-w-48"},{key:"status",label:"Status",type:"select",icon:e.jsx(ye,{className:"size-4"}),options:[{value:"published",label:"Published"},{value:"hidden",label:"Hidden"}],operators:[{value:"is",label:"is"}],searchable:!1,hideOperatorSelect:!0},{key:"reported",label:"Reported",type:"select",icon:e.jsx(W,{className:"size-4"}),options:[{value:"true",label:"Yes"},{value:"false",label:"No"}],operators:[{value:"is",label:"is"}],searchable:!1,hideOperatorSelect:!0},{key:"created_at",label:"Date",type:"date",className:"w-full max-w-32",icon:e.jsx(Je,{className:"size-4"}),operators:[{value:"is",label:"is"},{value:"before",label:"before"},{value:"after",label:"after"}]}],[n,o]),i=a.length>0,l=N("flex flex-row",!i&&"[grid-area:actions] pt-5 justify-start sm:justify-end sm:pt-0",i&&"col-start-1 col-end-4 row-start-3 pt-5");return e.jsx("div",{className:l,children:e.jsx(We,{addButtonIcon:i?e.jsx(Ze,{}):e.jsx(es,{}),addButtonText:i?"Add filter":"Filter",allowMultiple:!1,className:`[&>button]:order-last ${i?"[&>button]:border-none":"w-auto"}`,clearButtonClassName:"font-normal text-muted-foreground",clearButtonIcon:e.jsx(_e,{}),clearButtonText:"Clear",fields:c,filters:a,keyboardShortcut:"f",popoverAlign:i?"start":"end",showClearButton:i,showSearchInput:!1,onChange:r})})},us=({children:s})=>e.jsxs(J,{className:"relative !pb-6 md:sticky",variant:"inline-nav",children:[e.jsx(J.Title,{children:"Comments"}),s]}),hs=({children:s})=>e.jsx(rs,{children:e.jsx("div",{className:"grid w-full grow",children:e.jsx("div",{className:"flex h-full flex-col","data-testid":"comments-page",children:s})})});function xs({onClick:s,expanded:t}){return e.jsxs(b,{className:"shrink-0 gap-0.5 self-start p-0 text-base hover:bg-transparent",variant:"ghost",onClick:s,children:[t?"Show less":"Show more",t?e.jsx(ss,{}):e.jsx(Pe,{})]})}function ue({item:s}){const t=h.useRef(null),[a,r]=h.useState(!1),[n,o]=h.useState(!1);return h.useEffect(()=>{if(n)return;const c=()=>{t.current&&r(t.current.scrollHeight>t.current.clientHeight)};return c(),window.addEventListener("resize",c),()=>window.removeEventListener("resize",c)},[s.html,n]),e.jsx("div",{className:"mt-1 flex flex-col gap-2",children:e.jsxs("div",{className:`flex max-w-full flex-col items-start ${s.status==="hidden"&&"opacity-50"}`,children:[e.jsx("div",{dangerouslySetInnerHTML:{__html:s.html||""},ref:t,className:N("prose flex-1 text-base max-w-[80ch] balance leading-[1.5em] [&_*]:leading-[1.5em] [&_*]:text-base [&_*]:font-normal [&_blockquote]:border-l-[3px] [&_blockquote]:border-foreground [&_blockquote]:p-0 [&_blockquote]:pl-3 [&_blockquote_p]:mt-0 [&_a]:underline",n?"-mb-1 [&_p]:mb-[0.85em]":"line-clamp-2 [&_p]:m-0 [&_blockquote+p]:mt-1 mb-1")}),a&&e.jsx(xs,{expanded:n,onClick:()=>o(!n)})]})})}const I="CommentsResponseType",ps=Te({dataType:I,path:"/comments/",defaultNextPageParams:(s,t)=>{var a,r;return(a=s.meta)!=null&&a.pagination.next?{...t,page:(((r=s.meta)==null?void 0:r.pagination.next)||1).toString()}:void 0},returnData:s=>{const{pages:t}=s,a=t.flatMap(n=>n.comments),r=t[t.length-1].meta;return{comments:a,meta:r,isEnd:r?r.pagination.pages===r.pagination.page:!0}}}),he=s=>ps({...s,searchParams:{limit:"100",order:"created_at desc",include:"member,post,parent",...s?.searchParams}}),xe=ae({method:"PUT",path:({id:s})=>`/comments/${s}/`,body:({id:s})=>({comments:[{id:s,status:"hidden"}]}),invalidateQueries:{dataType:I}}),pe=ae({method:"PUT",path:({id:s})=>`/comments/${s}/`,body:({id:s})=>({comments:[{id:s,status:"published"}]}),invalidateQueries:{dataType:I}}),fs=B({dataType:I,path:s=>`/comments/${s}/`,defaultSearchParams:{include:"member,post,count.replies,count.direct_replies,count.likes,count.reports,parent,in_reply_to"}}),js=B({dataType:"CommentReportsResponseType",path:s=>`/comments/${s}/reports/`}),gs=(s,t)=>js(s,{...t}),bs=B({dataType:"CommentLikesResponseType",path:s=>`/comments/${s}/likes/`,defaultSearchParams:{include:"member",limit:"100",order:"created_at desc"}}),vs=(s,t)=>bs(s,{...t}),Ns=(s,t)=>he({...t,searchParams:{filter:`(parent_id:${s}+in_reply_to_id:null),in_reply_to_id:${s}`,order:"created_at asc",include:"member,post,count.direct_replies,count.likes,count.reports,parent,in_reply_to",limit:"100"}});function P({avatarImage:s,memberId:t,isHidden:a,className:r}){return e.jsxs("div",{className:N("relative flex size-6 min-w-6 items-center justify-center overflow-hidden rounded-full bg-accent md:size-8 md:min-w-8",a&&"opacity-50",r),children:[t&&s&&e.jsx("div",{className:"absolute inset-0",children:e.jsx("img",{alt:"Member avatar",src:s})}),e.jsx("div",{children:e.jsx(H,{className:"!size-3 text-muted-foreground md:!size-4",size:12})})]})}function ws(s){const t=new Date(s);return new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"numeric"}).format(t).replace(/(\d+),(\s+\d{4})/,"$1$2")}function fe({memberName:s,memberId:t,createdAt:a,isHidden:r,canComment:n,onAuthorClick:o,postTitle:c,onPostClick:i,className:l}){return e.jsxs("div",{className:N("flex items-baseline gap-4",l),children:[e.jsxs("div",{className:N("mb-1 flex min-w-0 items-center gap-x-1 text-sm",r&&"opacity-50"),children:[e.jsx("div",{className:"whitespace-nowrap",children:t&&o?e.jsx(b,{className:"flex h-auto items-center gap-1.5 truncate p-0 font-semibold text-primary hover:opacity-70",variant:"link",onClick:o,children:s||"Unknown"}):e.jsx("span",{className:"block truncate font-semibold",children:s||"Unknown"})}),n===!1&&e.jsx(D,{children:e.jsxs($,{children:[e.jsx(F,{asChild:!0,children:e.jsx("span",{"data-testid":"commenting-disabled-indicator",children:e.jsx(ie,{className:"size-3.5 text-muted-foreground"})})}),e.jsx(E,{children:"Comments disabled"})]})}),e.jsx(K,{className:"shrink-0 text-muted-foreground/50",size:16}),e.jsx("div",{className:"shrink-0 whitespace-nowrap",children:a&&e.jsx(D,{children:e.jsxs($,{children:[e.jsx(F,{asChild:!0,children:e.jsx("span",{className:"cursor-default text-sm text-muted-foreground",children:L(a)})}),e.jsx(E,{children:ws(a)})]})})}),c&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"shrink-0 text-muted-foreground",children:"on"}),e.jsx("div",{className:"min-w-0 truncate",children:i?e.jsx(b,{className:"block h-auto w-full cursor-pointer truncate p-0 text-left font-medium text-gray-800 hover:opacity-70 dark:text-gray-400",variant:"link",onClick:i,children:c}):e.jsx("span",{className:"font-medium text-gray-800 dark:text-gray-400",children:c})})]})]}),r&&e.jsx(Le,{variant:"secondary",children:"Hidden"})]})}function Cs({open:s,memberName:t,onOpenChange:a,onConfirm:r}){const[n,o]=h.useState(!1),c=l=>{l||o(!1),a(l)},i=()=>{r(n),o(!1)};return e.jsx(O,{open:s,onOpenChange:c,children:e.jsxs(U,{className:"gap-5",children:[e.jsxs(V,{children:[e.jsx(q,{children:"Disable comments"}),e.jsxs(Me,{children:[t||"This member"," won't be able to comment in the future. You can re-enable commenting anytime."]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(me,{checked:n,id:"hide-comments",onCheckedChange:l=>o(l===!0)}),e.jsx(is,{htmlFor:"hide-comments",children:"Hide all previous comments"})]}),e.jsxs(A,{children:[e.jsx(b,{variant:"outline",onClick:()=>c(!1),children:"Cancel"}),e.jsx(b,{onClick:i,children:"Disable comments"})]})]})})}function je({comment:s,commentPermalinksEnabled:t}){const{mutate:a}=Re(),{mutate:r}=Ie(),[n,o]=h.useState(!1),{id:c,post:i,member:l}=s,d=i?.url,u=l?.id,x=l?.can_comment,p=w=>{u&&(a({id:u,reason:`Disabled from comment ${c}`,hideComments:w}),o(!1))},g=()=>{u&&r({id:u})};return e.jsxs(e.Fragment,{children:[e.jsxs(ze,{children:[e.jsx(De,{asChild:!0,children:e.jsx(b,{className:"relative z-10 text-gray-800 hover:bg-secondary [&_svg]:size-4",size:"sm",variant:"ghost",children:e.jsx($e,{})})}),e.jsxs(Fe,{align:"start",children:[d&&(t?e.jsx(T,{asChild:!0,children:e.jsxs("a",{href:`${d}#ghost-comments-${c}`,rel:"noopener noreferrer",target:"_blank",children:[e.jsx(X,{className:"size-4"}),"View on post"]})}):e.jsx(T,{asChild:!0,children:e.jsxs("a",{href:d,rel:"noopener noreferrer",target:"_blank",children:[e.jsx(X,{className:"size-4"}),"View post"]})})),u&&e.jsx(T,{asChild:!0,children:e.jsxs("a",{href:`#/members/${u}`,children:[e.jsx(H,{className:"size-4"}),"View member"]})}),u&&(x!==!1?e.jsxs(T,{onClick:()=>o(!0),children:[e.jsx(ie,{className:"size-4"}),"Disable commenting"]}):e.jsxs(T,{onClick:g,children:[e.jsx(Ee,{className:"size-4"}),"Enable commenting"]}))]})]}),e.jsx(Cs,{memberName:l?.name,open:n,onConfirm:p,onOpenChange:o})]})}function ks({comment:s,open:t,onOpenChange:a}){const{data:r,isLoading:n}=vs(s.id,{enabled:t}),o=r?.comment_likes??[],c=s.count?.likes??0,i=c-o.length;return e.jsx(O,{open:t,onOpenChange:a,children:e.jsxs(U,{"aria-describedby":void 0,children:[e.jsx(V,{children:e.jsxs(q,{children:[c," ",c===1?"like":"likes"]})}),e.jsx("div",{className:"overflow-hidden rounded-md border p-3",children:e.jsxs("div",{className:"flex min-w-0 items-start gap-3",children:[e.jsx(P,{avatarImage:s.member?.avatar_image,className:"shrink-0",memberId:s.member?.id}),e.jsxs("div",{className:"flex min-w-0 flex-col overflow-hidden",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-1 text-sm",children:[e.jsx("span",{className:"shrink-0 font-semibold",children:s.member?.name||"Unknown"}),e.jsx(K,{className:"shrink-0 text-muted-foreground/50",size:16}),e.jsx("span",{className:"shrink-0 text-muted-foreground",children:s.created_at&&L(s.created_at)}),e.jsx("span",{className:"shrink-0 text-muted-foreground",children:"on"}),e.jsx("span",{className:"min-w-0 truncate font-medium text-gray-800 dark:text-gray-400",children:s.post?.title||"Unknown post"})]}),e.jsx("div",{dangerouslySetInnerHTML:{__html:s.html||""},className:"prose mt-2 line-clamp-2 text-sm [&_*]:text-sm [&_*]:leading-[1.5em] [&_p]:m-0"})]})]})}),e.jsx("div",{className:"-mx-1 max-h-64 overflow-y-auto px-1",children:n?e.jsx("div",{className:"flex justify-center py-4",children:e.jsx(M,{size:"md"})}):e.jsxs("div",{className:"flex flex-col gap-3 pb-1",children:[o.map(l=>e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("div",{className:"relative shrink-0",children:[e.jsx(P,{avatarImage:l.member?.avatar_image,memberId:l.member?.id}),e.jsx("div",{className:"absolute -bottom-0.5 -right-0.5 flex size-4 items-center justify-center rounded-full bg-pink-500 text-white",children:e.jsx(re,{className:"size-2.5",fill:"currentColor"})})]}),e.jsx("span",{className:"font-medium",children:l.member?.name||"Deleted member"})]}),e.jsx("span",{className:"shrink-0 text-sm text-muted-foreground",children:L(l.created_at)})]},l.id)),i>0&&e.jsxs("div",{className:"pt-1 text-center text-sm text-muted-foreground",children:["and ",i," more"]})]})}),e.jsx(A,{children:e.jsx(b,{onClick:()=>a(!1),children:"OK"})})]})})}function ys({comment:s,open:t,onOpenChange:a}){const{data:r,isLoading:n}=gs(s.id,{enabled:t}),o=r?.comment_reports??[],c=s.count?.reports??o.length;return e.jsx(O,{open:t,onOpenChange:a,children:e.jsxs(U,{"aria-describedby":void 0,children:[e.jsx(V,{children:e.jsxs(q,{children:[c," ",c===1?"report":"reports"]})}),e.jsx("div",{className:"overflow-hidden rounded-md border p-3",children:e.jsxs("div",{className:"flex min-w-0 items-start gap-3",children:[e.jsx(P,{avatarImage:s.member?.avatar_image,className:"shrink-0",memberId:s.member?.id}),e.jsxs("div",{className:"flex min-w-0 flex-col overflow-hidden",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-1 text-sm",children:[e.jsx("span",{className:"shrink-0 font-semibold",children:s.member?.name||"Unknown"}),e.jsx(K,{className:"shrink-0 text-muted-foreground/50",size:16}),e.jsx("span",{className:"shrink-0 text-muted-foreground",children:s.created_at&&L(s.created_at)}),e.jsx("span",{className:"shrink-0 text-muted-foreground",children:"on"}),e.jsx("span",{className:"min-w-0 truncate font-medium text-gray-800 dark:text-gray-400",children:s.post?.title||"Unknown post"})]}),e.jsx("div",{dangerouslySetInnerHTML:{__html:s.html||""},className:"prose mt-2 line-clamp-2 text-sm [&_*]:text-sm [&_*]:leading-[1.5em] [&_p]:m-0"})]})]})}),e.jsx("div",{className:"-mx-1 max-h-64 overflow-y-auto px-1",children:n?e.jsx("div",{className:"flex justify-center py-4",children:e.jsx(M,{size:"md"})}):e.jsx("div",{className:"flex flex-col gap-3 pb-1",children:o.map(i=>e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("div",{className:"relative shrink-0",children:[e.jsx(P,{avatarImage:i.member?.avatar_image,memberId:i.member?.id}),e.jsx("div",{className:"absolute -bottom-0.5 -right-0.5 flex size-4 items-center justify-center rounded-full bg-red text-white",children:e.jsx(W,{className:"size-2.5",fill:"currentColor"})})]}),e.jsx("span",{className:"font-medium",children:i.member?.name||"Deleted member"})]}),e.jsx("span",{className:"shrink-0 text-sm text-muted-foreground",children:L(i.created_at)})]},i.id))})}),e.jsx(A,{children:e.jsx(b,{onClick:()=>a(!1),children:"OK"})})]})})}function z({icon:s,count:t,label:a,to:r,onClick:n,className:o,testId:c}){const i=N("flex items-center gap-1 text-xs text-gray-800",o),l=e.jsxs(e.Fragment,{children:[s,e.jsx("span",{children:He(t)})]}),d=r||n;return e.jsx(D,{children:e.jsxs($,{children:[e.jsx(F,{asChild:!0,children:r?e.jsx(Q,{className:N(i,"cursor-pointer hover:opacity-70"),"data-testid":c,to:r,onClick:u=>{u.stopPropagation()},children:l}):n?e.jsx("button",{className:N(i,"cursor-pointer hover:opacity-70"),"data-testid":c,type:"button",onClick:u=>{u.stopPropagation(),n()},children:l}):e.jsx("div",{className:i,"data-testid":c,children:l})}),e.jsx(E,{children:d?`View ${a.toLowerCase()}`:a})]})})}function G(s,t){if(!t)return;const a=new URLSearchParams(s);return a.set("thread",`is:${t}`),`?${a.toString()}`}function ge({comment:s,className:t}){const[a]=R(),[r,n]=h.useState(!1),[o,c]=h.useState(!1),i=G(a,s.id),l=s.count?.direct_replies??s.count?.replies??s.replies?.length??0,d=s.count?.likes??0,u=s.count?.reports??0,x=l>0,p=d>0,g=u>0;return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:N("flex items-center gap-6",t),children:[e.jsx(z,{count:l,icon:e.jsx(ls,{size:16,strokeWidth:1.5}),label:"Replies",testId:"replies-metric",to:x?i:void 0}),e.jsx(z,{count:d,icon:e.jsx(re,{size:16,strokeWidth:1.5}),label:"Likes",onClick:p?()=>n(!0):void 0}),e.jsx(z,{className:g?"font-semibold text-red":void 0,count:u,icon:e.jsx(W,{size:16,strokeWidth:1.5}),label:"Reports",onClick:g?()=>c(!0):void 0})]}),e.jsx(ks,{comment:s,open:r,onOpenChange:n}),e.jsx(ys,{comment:s,open:o,onOpenChange:c})]})}function _s({hasReplies:s}){return s?e.jsx("div",{className:"mb-2 h-full w-px grow rounded bg-gradient-to-b from-muted-foreground/20 from-70% to-transparent","data-testid":"replies-line"}):null}function be({comment:s,isReply:t=!1,isSelectedComment:a=!1,selectedCommentId:r,commentPermalinksEnabled:n}){const[o]=R(),{mutate:c}=xe(),{mutate:i}=pe(),l=(s.replies?.length??0)>0||(s.count?.direct_replies??s.count?.replies??0)>0,d=!l||t?"mb-7":"mb-0";return e.jsxs("div",{className:`flex w-full flex-row ${d}`,children:[e.jsxs("div",{className:"mr-2 flex shrink-0 flex-col items-center justify-start md:mr-3",children:[e.jsx(P,{avatarImage:s.member?.avatar_image,className:"mb-3 shrink-0 md:mb-4",isHidden:s.status==="hidden",memberId:s.member?.id}),e.jsx(_s,{hasReplies:l&&!t})]}),e.jsx("div",{className:"grow",children:e.jsxs("div",{className:"w-full","data-testid":`comment-thread-row-${s.id}`,children:[e.jsxs("div",{className:"flex min-w-0 flex-col",children:[e.jsx(fe,{canComment:s.member?.can_comment,createdAt:s.created_at,isHidden:s.status==="hidden",memberId:s.member?.id,memberName:s.member?.name}),s.in_reply_to_snippet&&a&&e.jsxs("div",{className:`mb-1 line-clamp-1 text-sm ${s.status==="hidden"&&"opacity-50"}`,children:[e.jsx("span",{className:"text-muted-foreground",children:"Replied to:"})," ",e.jsx(Q,{className:"text-sm font-normal text-muted-foreground hover:text-foreground","data-testid":"replied-to-link",to:G(o,s.in_reply_to_id||s.parent_id)||"",onClick:u=>{u.stopPropagation()},children:s.in_reply_to_snippet})]}),e.jsx(ue,{item:s}),e.jsxs("div",{className:"mt-4 flex flex-row flex-wrap items-center gap-3",children:[s.status==="published"&&e.jsxs(b,{className:"text-gray-800",size:"sm",variant:"outline",onClick:()=>c({id:s.id}),children:[e.jsx(le,{}),e.jsx("span",{className:"max-md:hidden",children:"Hide"})]}),s.status==="hidden"&&e.jsxs(b,{className:"text-gray-800",size:"sm",variant:"outline",onClick:()=>i({id:s.id}),children:[e.jsx(oe,{}),e.jsx("span",{className:"max-md:hidden",children:"Show"})]}),e.jsx(ge,{comment:s}),e.jsx(je,{comment:s,commentPermalinksEnabled:n})]})]}),l&&s.replies&&e.jsx("div",{className:"-ml-2 mb-4 mt-7 pl-2 md:-ml-3 md:mb-0 md:mt-8 md:pl-3",children:s.replies.map(u=>e.jsx(be,{comment:u,commentPermalinksEnabled:n,isReply:!0,selectedCommentId:r},u.id))})]})})]})}const Ss=({selectedComment:s,replies:t,selectedCommentId:a,commentPermalinksEnabled:r})=>{const n={...s,replies:t};return e.jsx("div",{className:"flex flex-col","data-testid":"comment-thread-list",children:e.jsx(be,{comment:n,commentPermalinksEnabled:r,isSelectedComment:!0,selectedCommentId:a})})},Ps=({commentId:s,open:t,onOpenChange:a,commentPermalinksEnabled:r})=>{const{data:n,isLoading:o,isError:c}=Ns(s??"",{enabled:t&&!!s}),{data:i,isLoading:l,isError:d}=fs(s??"",{enabled:t&&!!s}),u=o||l,x=d||c&&!i,p=i?.comments?.[0],g=n?.comments||[];return e.jsx(Be,{open:t,onOpenChange:a,children:e.jsxs(Oe,{className:"overflow-y-auto px-6 pt-0 sm:max-w-[600px]",children:[e.jsx(Ue,{className:"sticky top-0 z-40 -mx-6 bg-background/60 p-6 backdrop-blur",children:e.jsx(Ve,{className:"text-md",children:"Thread"})}),p?.post&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("h3",{className:"line-clamp-1 text-xl font-semibold text-foreground",children:p.post.title}),p.post.excerpt&&e.jsx("p",{className:"mt-1 line-clamp-2 text-sm text-muted-foreground",children:p.post.excerpt})]}),p.post.feature_image&&e.jsx("img",{alt:p.post.title||"Post feature image",className:"hidden aspect-video h-18 shrink-0 rounded object-cover lg:block",src:p.post.feature_image})]}),e.jsx(qe,{className:"-mx-6 my-6 w-auto"})]}),e.jsx("div",{children:u?e.jsx("div",{className:"flex h-full items-center justify-center py-8",children:e.jsx(M,{size:"lg"})}):x||!p?e.jsx("div",{className:"flex h-full items-center justify-center py-8",children:e.jsx(de,{actions:e.jsx(b,{variant:"outline",onClick:()=>a(!1),children:"Back to comments"}),description:"This thread may have been deleted or doesn't exist.",title:"Thread not found",children:e.jsx(ne,{})})}):e.jsx(Ss,{commentPermalinksEnabled:r,replies:g,selectedComment:p,selectedCommentId:s??""})})]})})},ee=new Map;function Ts({parentRef:s,enabled:t=!0,isLoading:a=!1}){const r=Ae(),[n,o]=h.useState(null),c=h.useRef(null);h.useEffect(()=>{if(!t||!s.current)return;const i=ts(s.current);o(i)},[t,s]),h.useEffect(()=>{if(!t||!n)return;const i=r.pathname+r.search,l=()=>{const d=n.scrollTop;ee.set(i,d)};return n.addEventListener("scroll",l),()=>n.removeEventListener("scroll",l)},[t,r.pathname,r.search,n]),h.useEffect(()=>{const i=r.pathname+r.search,l=ee.get(i);if(!(!t||!n||a)){if(l!==void 0&&c.current!==i){let d=0;const u=3,x=()=>{if(d+=1,!n)return;const g=n.scrollTop,w=n.scrollHeight,y=n.clientHeight,C=w-y;if(l>C&&d<u){setTimeout(x,100);return}if(Math.abs(l-g)>5){const _=Math.min(l,C);n.scrollTop=_}},p=setTimeout(x,150);return()=>clearTimeout(p)}c.current=i}},[t,r.pathname,r.search,n,a])}const se=({height:s})=>e.jsx("div",{"aria-hidden":"true",className:"flex",children:e.jsx("div",{className:"flex",style:{height:s}})}),Ls=h.forwardRef(function(t,a){return e.jsx("div",{ref:a,...t,"aria-hidden":"true",className:"relative flex flex-col",children:e.jsx("div",{className:"relative z-10 h-24 animate-pulse",children:e.jsx("div",{className:"h-full rounded-md bg-muted","data-testid":"loading-placeholder"})})})});function Ms({items:s,totalItems:t,hasNextPage:a,isFetchingNextPage:r,fetchNextPage:n,onAddFilter:o,isLoading:c,commentPermalinksEnabled:i}){const l=h.useRef(null),[d,u]=R(),[x,p]=h.useState(!1),[g,w]=h.useState(null),{mutate:y}=xe(),{mutate:C}=pe(),_=j=>{if(p(j),!j){const k=new URLSearchParams(d);k.delete("thread"),u(k,{replace:!0})}};h.useEffect(()=>{const j=d.get("thread");if(j){const k=j.match(/^is:(.+)$/);if(k&&k[1]){const m=k[1];w(m),p(!0)}else p(!1),w(null)}else p(!1),w(null)},[d]),Ts({parentRef:l,isLoading:c});const{visibleItems:v,spaceBefore:f,spaceAfter:S}=as({items:s,totalItems:t,hasNextPage:a,isFetchingNextPage:r,fetchNextPage:n,parentRef:l});return e.jsxs("div",{ref:l,className:"overflow-hidden",children:[e.jsx("div",{className:"flex flex-col","data-testid":"comments-list",children:e.jsxs("div",{className:"flex flex-col",children:[e.jsx(se,{height:f}),v.map(({key:j,virtualItem:k,item:m,props:Y})=>k.index>s.length-1?e.jsx(Ls,{...Y},j):e.jsxs("div",{...Y,className:"grid w-full grid-cols-1 items-start justify-between gap-4 border-b p-3 hover:bg-muted/50 md:p-5 lg:grid-cols-[minmax(0,1fr)_144px]","data-testid":"comment-list-row",onClick:()=>{x&&_(!1)},children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(P,{avatarImage:m.member?.avatar_image,isHidden:m.status==="hidden",memberId:m.member?.id}),e.jsxs("div",{className:"flex min-w-0 flex-col",children:[e.jsx(fe,{canComment:m.member?.can_comment,createdAt:m.created_at,isHidden:m.status==="hidden",memberId:m.member?.id,memberName:m.member?.name,postTitle:m.post?.title,onAuthorClick:m.member?.id?()=>o("author",m.member.id):void 0,onPostClick:m.post?.id?()=>o("post",m.post.id):void 0}),m.in_reply_to_snippet&&e.jsxs("div",{className:`mb-1 line-clamp-1 max-w-3xl text-sm ${m.status==="hidden"&&"opacity-50"}`,children:[e.jsx("span",{className:"text-muted-foreground",children:"Replied to:"})," ",e.jsx(Q,{className:"text-sm font-normal text-muted-foreground hover:text-foreground","data-testid":"replied-to-link",to:G(d,m.in_reply_to_id||m.parent_id)||"",onClick:Ne=>{Ne.stopPropagation()},children:m.in_reply_to_snippet})]}),e.jsx(ue,{item:m}),e.jsxs("div",{className:"mt-4 flex flex-row flex-nowrap items-center gap-3",children:[m.status==="published"&&e.jsxs(b,{className:"text-foreground",size:"sm",variant:"outline",onClick:()=>y({id:m.id}),children:[e.jsx(le,{}),"Hide"]}),m.status==="hidden"&&e.jsxs(b,{className:"text-foreground",size:"sm",variant:"outline",onClick:()=>C({id:m.id}),children:[e.jsx(oe,{}),"Show"]}),e.jsx(ge,{className:"ml-2",comment:m}),e.jsx(je,{comment:m,commentPermalinksEnabled:i})]})]})]}),e.jsx("div",{children:m.post?.feature_image?e.jsx("img",{alt:m.post.title||"Post feature image",className:`hidden aspect-video w-36 rounded object-cover lg:block ${m.status==="hidden"&&"opacity-50"}`,src:m.post.feature_image}):null})]},j)),e.jsx(se,{height:S})]})}),e.jsx(Ps,{commentId:g,commentPermalinksEnabled:i,open:x,onOpenChange:_})]})}const ve=["id","status","created_at","body","post","author","reported"];function Rs(s){const t=[];for(const a of s)if(a.values[0])switch(a.field){case"id":t.push(`id:'${a.values[0]}'`);break;case"status":t.push(`status:${a.values[0]}`);break;case"created_at":if(a.operator==="before"&&a.values[0])t.push(`created_at:<'${a.values[0]}'`);else if(a.operator==="after"&&a.values[0])t.push(`created_at:>'${a.values[0]}'`);else if(a.operator==="is"&&a.values[0]){const o=String(a.values[0]),c=new Date(o+"T00:00:00").toISOString(),i=new Date(o+"T23:59:59.999").toISOString();t.push(`created_at:>='${c}'+created_at:<='${i}'`)}break;case"body":const n=a.values[0].replace(/'/g,"\\'");a.operator==="contains"?t.push(`html:~'${n}'`):a.operator==="not_contains"&&t.push(`html:-~'${n}'`);break;case"post":a.operator==="is_not"?t.push(`post_id:-${a.values[0]}`):t.push(`post_id:${a.values[0]}`);break;case"author":a.operator==="is_not"?t.push(`member_id:-${a.values[0]}`):t.push(`member_id:${a.values[0]}`);break;case"reported":a.values[0]==="true"?t.push("count.reports:>0"):a.values[0]==="false"&&t.push("count.reports:0");break}return t.length?t.join("+"):void 0}function Is(s){if(!s)return null;const t=s.indexOf(":");return t<=0?null:{operator:s.substring(0,t),value:s.substring(t+1)}}function zs(s){const t=[];for(const[a,r]of s.entries()){if(!ve.includes(a)||!r)continue;const n=Is(r);n&&t.push({id:a,field:a,operator:n.operator,values:[n.value]})}return t}function Ds(s){const t=new URLSearchParams;for(const a of s)if(ve.includes(a.field)&&a.values[0]!==void 0){const r=`${a.operator}:${String(a.values[0])}`;t.set(a.field,r)}return t}function $s(){const[s,t]=R(),a=h.useMemo(()=>zs(s),[s]),r=h.useCallback((i,l={})=>{const d=typeof i=="function"?i(a):i,u=Ds(d),x=l.replace??!0;t(u,{replace:x})},[a,t]),n=h.useCallback(({replace:i=!0}={})=>{t(new URLSearchParams,{replace:i})},[t]),o=h.useMemo(()=>Rs(a),[a]),c=h.useMemo(()=>a.length===1&&a[0].field==="id",[a]);return{filters:a,nql:o,setFilters:r,clearFilters:n,isSingleIdFilter:c}}function Fs({comments:s}){return h.useMemo(()=>{const t=new Map,a=new Map;for(const r of s)r.post?.id&&r.post?.title&&t.set(r.post.id,{id:r.post.id,title:r.post.title}),r.member?.id&&a.set(r.member.id,{id:r.member.id,name:r.member.name,email:r.member.email});return{knownPosts:Array.from(t.values()),knownMembers:Array.from(a.values())}},[s])}const Gs=()=>{const{filters:s,nql:t,setFilters:a,clearFilters:r,isSingleIdFilter:n}=$s(),{data:o}=Qe(),c=o?.config?.labs?.commentPermalinks===!0,i=h.useCallback((v,f,S="is")=>{a(j=>[...j.filter(m=>m.field!==v),Ke(v,S,[f])],{replace:!1})},[a]),{data:l,isError:d,isFetching:u,isFetchingNextPage:x,isRefetching:p,fetchNextPage:g,hasNextPage:w}=he({searchParams:t?{filter:t}:{},keepPreviousData:!0}),{knownPosts:y,knownMembers:C}=Fs({comments:l?.comments??[]}),_=u&&!x&&!p;return e.jsxs(hs,{children:[e.jsx(us,{children:!n&&e.jsx(ms,{filters:s,knownMembers:C,knownPosts:y,onFiltersChange:a})}),e.jsx(os,{children:_?e.jsx("div",{className:"flex h-full items-center justify-center",children:e.jsx(M,{size:"lg"})}):d?e.jsxs("div",{className:"mb-16 flex h-full flex-col items-center justify-center",children:[e.jsx("h2",{className:"mb-2 text-xl font-medium",children:"Error loading comments"}),e.jsx("p",{className:"mb-4 text-muted-foreground",children:"Please reload the page to try again"}),e.jsx(b,{onClick:()=>window.location.reload(),children:"Reload page"})]}):l?.comments.length?e.jsxs(e.Fragment,{children:[e.jsx(Ms,{commentPermalinksEnabled:c,fetchNextPage:g,hasNextPage:w,isFetchingNextPage:x,isLoading:u&&!x,items:l?.comments??[],totalItems:l?.meta?.pagination?.total??0,onAddFilter:i}),n&&e.jsx("div",{className:"flex justify-center py-8",children:e.jsx(b,{variant:"outline",onClick:()=>r({replace:!1}),children:"Show all comments"})})]}):e.jsx("div",{className:"flex h-full items-center justify-center",children:e.jsx(de,{title:"No comments yet",children:e.jsx(ne,{})})})})]})};export{Gs as default};