ghost 6.62.0 → 6.63.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 (439) hide show
  1. package/components/tryghost-adapter-base-jobs-0.0.0.tgz +0 -0
  2. package/components/tryghost-adapter-base-scheduling-0.2.3.tgz +0 -0
  3. package/components/tryghost-adapter-base-sso-0.1.3.tgz +0 -0
  4. package/components/tryghost-admin-api-schema-0.0.0.tgz +0 -0
  5. package/components/tryghost-checkout-0.0.0.tgz +0 -0
  6. package/components/tryghost-i18n-0.0.0.tgz +0 -0
  7. package/components/tryghost-kg-card-factory-5.2.4.tgz +0 -0
  8. package/components/tryghost-kg-clean-basic-html-4.3.4.tgz +0 -0
  9. package/components/tryghost-kg-converters-1.2.5.tgz +0 -0
  10. package/components/tryghost-kg-default-cards-10.3.5.tgz +0 -0
  11. package/components/tryghost-kg-default-nodes-2.2.1.tgz +0 -0
  12. package/components/tryghost-kg-default-transforms-1.3.4.tgz +0 -0
  13. package/components/tryghost-kg-html-to-lexical-1.4.0.tgz +0 -0
  14. package/components/tryghost-kg-lexical-html-renderer-1.5.0.tgz +0 -0
  15. package/components/tryghost-kg-markdown-html-renderer-7.2.4.tgz +0 -0
  16. package/components/tryghost-kg-utils-1.1.4.tgz +0 -0
  17. package/components/tryghost-limit-service-0.0.0.tgz +0 -0
  18. package/components/tryghost-metafield-types-0.0.0.tgz +0 -0
  19. package/content/themes/source/package.json +2 -2
  20. package/content/themes/source/partials/post-card.hbs +1 -1
  21. package/core/boot.js +7 -5
  22. package/core/built/admin/assets/{about-Dyae_UT6.js → about-C1C3s5-g.js} +1 -1
  23. package/core/built/admin/assets/accordion-CxGsDKwa.js +1 -0
  24. package/core/built/admin/assets/{account-migration-CESa0mnX.js → account-migration-CbUhW6gk.js} +1 -1
  25. package/core/built/admin/assets/activitypub/{account-migration-By69CgCp.js → account-migration-KA6Jjf9L.js} +7 -7
  26. package/core/built/admin/assets/activitypub/activitypub.js +3 -3
  27. package/core/built/admin/assets/activitypub/{avatar-DLPL3Abs.js → avatar-DVJF5bxP.js} +2 -2
  28. package/core/built/admin/assets/activitypub/{avatar-flipboard-C9iDY-QV.js → avatar-flipboard-csQaNeYK.js} +2 -2
  29. package/core/built/admin/assets/activitypub/{bluesky-sharing-BJcPMrDd.js → bluesky-sharing-C7nTDMvw.js} +9 -9
  30. package/core/built/admin/assets/activitypub/{content-formatters-3rTHg3mp.js → content-formatters-CLcjaBwV.js} +4 -4
  31. package/core/built/admin/assets/activitypub/{copy-DIAOQoCZ.js → copy-DcOh8kXw.js} +2 -2
  32. package/core/built/admin/assets/activitypub/{domain-DUR4xSkV.js → domain-fZ-X8i4-.js} +9 -9
  33. package/core/built/admin/assets/activitypub/{edit-profile-BqtfzxCp.js → edit-profile-BqMLQV88.js} +6 -6
  34. package/core/built/admin/assets/activitypub/{explore-BxuJd-J4.js → explore-B4yPoP8E.js} +10 -10
  35. package/core/built/admin/assets/activitypub/{feed-BM1TcksA.js → feed-BRC_mvAe.js} +9 -9
  36. package/core/built/admin/assets/activitypub/{field-Dn7HHx2-.js → field-COacNgOt.js} +3 -3
  37. package/core/built/admin/assets/activitypub/{hash-Bm3WxYN4.js → hash-C7u-irQQ.js} +2 -2
  38. package/core/built/admin/assets/activitypub/{inbox-CCjkuow2.js → inbox-BW-yvUoN.js} +10 -10
  39. package/core/built/admin/assets/activitypub/{inbox-d8oJRTf4.js → inbox-CbTTdDQ3.js} +2 -2
  40. package/core/built/admin/assets/activitypub/{label-1AA_s9Fa.js → label-kPMmYI7l.js} +3 -3
  41. package/core/built/admin/assets/activitypub/layout-BL4_jtuV.js +1 -0
  42. package/core/built/admin/assets/activitypub/{moderation-CnmxEB8w.js → moderation-CuidJzc0.js} +10 -10
  43. package/core/built/admin/assets/activitypub/{note-ZKc_Bnba.js → note-CAMRRSqD.js} +7 -7
  44. package/core/built/admin/assets/activitypub/{notifications-CB2tJZau.js → notifications-BmNlXGgp.js} +9 -9
  45. package/core/built/admin/assets/activitypub/{onboarding-BsJ9E5qf.js → onboarding-Bqg7fh_L.js} +2 -2
  46. package/core/built/admin/assets/activitypub/{onboarding-CSUJJIlh.js → onboarding-Dmun9jr_.js} +2 -2
  47. package/core/built/admin/assets/activitypub/{preferences-0-JZnUkI.js → preferences--oH19wf9.js} +11 -11
  48. package/core/built/admin/assets/activitypub/{profile-C35cFIhM.js → profile-DH_tQx2D.js} +14 -14
  49. package/core/built/admin/assets/activitypub/{reply-DYK5vVqb.js → reply-Cap9PxSH.js} +2 -2
  50. package/core/built/admin/assets/activitypub/{routes-BD4vscyc.js → routes-DdyY9uFF.js} +30 -30
  51. package/core/built/admin/assets/activitypub/{separator-BbQqTm-p.js → separator-CAxxu8VV.js} +3 -3
  52. package/core/built/admin/assets/activitypub/{settings-BsMROdqh.js → settings-B6EEcVkW.js} +6 -6
  53. package/core/built/admin/assets/activitypub/{site-O0RL9YCN.js → site-BYps63oh.js} +2 -2
  54. package/core/built/admin/assets/activitypub/{step-1-BMSx7c_X.js → step-1-CKjR2KAm.js} +6 -6
  55. package/core/built/admin/assets/activitypub/{step-2-DtPQzlTH.js → step-2-B6PKfOUQ.js} +6 -6
  56. package/core/built/admin/assets/activitypub/{step-3-CLlOZTyt.js → step-3-C-qBbcUo.js} +11 -11
  57. package/core/built/admin/assets/activitypub/{tabs-Dxk-b9M-.js → tabs-DLhZtVde.js} +6 -6
  58. package/core/built/admin/assets/activitypub/{topic-filter-5yZH6tId.js → topic-filter-DsUOuu0k.js} +3 -3
  59. package/core/built/admin/assets/activitypub/{use-activity-pub-queries-CV50qe03.js → use-activity-pub-queries-CX9snsLs.js} +3 -3
  60. package/core/built/admin/assets/activitypub/{use-navigate-with-base-path-Bmk5h4lW.js → use-navigate-with-base-path-DsJTGDSS.js} +988 -959
  61. package/core/built/admin/assets/activitypub/{use-reply-chain-data-Cbvzgjzd.js → use-reply-chain-data-AJi9zkzm.js} +5 -5
  62. package/core/built/admin/assets/activitypub/{users-BjcoP_HC.js → users-inweyKL5.js} +186 -160
  63. package/core/built/admin/assets/activitypub/{x-DbQZOLiI.js → x-DR8AT3-4.js} +2 -2
  64. package/core/built/admin/assets/{add-integration-modal-BlF6rs_f.js → add-integration-modal-BT_onDJy.js} +1 -1
  65. package/core/built/admin/assets/{add-newsletter-modal-CglVQqah.js → add-newsletter-modal-Cx1kQpiY.js} +1 -1
  66. package/core/built/admin/assets/{add-recommendation-modal-wz7BsuaG.js → add-recommendation-modal-B5nvAhvr.js} +1 -1
  67. package/core/built/admin/assets/{analytics-C4HE1gBg.js → analytics-DjoJWPI7.js} +1 -1
  68. package/core/built/admin/assets/{announcement-bar-modal-Ci4zz8jO.js → announcement-bar-modal-Dwd0EGFP.js} +1 -1
  69. package/core/built/admin/assets/{api-keys-3-0vJC3Y.js → api-keys-BGPzLHzA.js} +1 -1
  70. package/core/built/admin/assets/{api-keys-Ck-Yteiv.js → api-keys-BoeacM-s.js} +1 -1
  71. package/core/built/admin/assets/{audience-CtbA54Sn.js → audience-ceV3XVHq.js} +1 -1
  72. package/core/built/admin/assets/automated-emails-BLesE41L.js +1 -0
  73. package/core/built/admin/assets/{automations-sAcJ1334.js → automations-BN4u3GR8.js} +1 -1
  74. package/core/built/admin/assets/automations-C-ZTUwW3.js +1 -0
  75. package/core/built/admin/assets/{bluesky-sharing-BEtJ_gL_.js → bluesky-sharing-vzh-oPXL.js} +1 -1
  76. package/core/built/admin/assets/{breadcrumb-zUrZrBtW.js → breadcrumb-CaLk2b7D.js} +1 -1
  77. package/core/built/admin/assets/{button-eNMKQWXr.js → button-Dvcv1QSR.js} +1 -1
  78. package/core/built/admin/assets/calendar-Bl9RLcZX.js +1 -0
  79. package/core/built/admin/assets/{chart-helpers-CfBKt0vT.js → chart-helpers-FHywU0pj.js} +1 -1
  80. package/core/built/admin/assets/{checkbox-CgOn_tKW.js → checkbox-BtayFtjg.js} +1 -1
  81. package/core/built/admin/assets/chunk.254.035b85ec456ebbd7336b.js +440 -0
  82. package/core/built/admin/assets/{chunk.524.a697dee88db67fdf6021.js → chunk.524.e6975095fccdf22d90f8.js} +5 -5
  83. package/core/built/admin/assets/{chunk.582.5ed5d124cfca9c259b9c.js → chunk.582.98b485f9b2802f540897.js} +6 -6
  84. package/core/built/admin/assets/{chunk.492.f24d855d7e3f3aad261c.js → chunk.901.4ccc639821020230bcca.js} +9949 -7921
  85. package/core/built/admin/assets/{code-editor-view-K2wI-I5f.js → code-editor-view-C3ZfoF1X.js} +1 -1
  86. package/core/built/admin/assets/{code-editor-view-BYNoAoNV.js → code-editor-view-CAyRWy1s.js} +1 -1
  87. package/core/built/admin/assets/{color-picker-Ddw80xX6.js → color-picker-G4kGR7rp.js} +1 -1
  88. package/core/built/admin/assets/{color-picker-field-D9nUhvA7.js → color-picker-field-DQFVTNnT.js} +1 -1
  89. package/core/built/admin/assets/{combobox-w9j8PPQT.js → combobox-BnYzgEB4.js} +1 -1
  90. package/core/built/admin/assets/{command-BfpHORBv.js → command-C_vyTikI.js} +1 -1
  91. package/core/built/admin/assets/comments-aBrxfnZf.js +1 -0
  92. package/core/built/admin/assets/{config-DOMQDZGZ.js → config-kSHvwdTG.js} +1 -1
  93. package/core/built/admin/assets/{confirmation-context-CBM8G0Vj.js → confirmation-context-DwXX_Y5h.js} +1 -1
  94. package/core/built/admin/assets/{content-api-modal-TXRz3U7S.js → content-api-modal-D2G0nJP6.js} +1 -1
  95. package/core/built/admin/assets/{context-menu-_QMdd3kp.js → context-menu-DOVB6yaz.js} +1 -1
  96. package/core/built/admin/assets/{copy-field-6N01S07E.js → copy-field-DCJwh9qf.js} +1 -1
  97. package/core/built/admin/assets/{create-ghost-browse-value-source-qIBymvvf.js → create-ghost-browse-value-source-5C53jJaX.js} +1 -1
  98. package/core/built/admin/assets/custom-field-type-option-BAuW0F-E.js +1 -0
  99. package/core/built/admin/assets/{custom-integration-modal-DmNquxUV.js → custom-integration-modal-AbJGVyKc.js} +1 -1
  100. package/core/built/admin/assets/{date-range-select-uvz_DtPh.js → date-range-select-BY3K-ukj.js} +1 -1
  101. package/core/built/admin/assets/design-and-theme-modal-BvEy4_pC.js +2 -0
  102. package/core/built/admin/assets/{dirty-confirm-dialog-BZ1iytEd.js → dirty-confirm-dialog-DVPuGz3U.js} +1 -1
  103. package/core/built/admin/assets/{disabled-sources-indicator-DMRrxsiJ.js → disabled-sources-indicator-Cy7Zp4c8.js} +1 -1
  104. package/core/built/admin/assets/{domain-BNYrt0aD.js → domain-Dl61QGuk.js} +1 -1
  105. package/core/built/admin/assets/{dropzone-D7nFdAe5.js → dropzone-Dtz5Rmjt.js} +4 -4
  106. package/core/built/admin/assets/edit-profile-DNJSMDwm.js +1 -0
  107. package/core/built/admin/assets/editor-DbAen9zf.js +8 -0
  108. package/core/built/admin/assets/editor-screen-BFWThIai.js +26 -0
  109. package/core/built/admin/assets/email-sending-status-context-CWDOD1FN.js +1 -0
  110. package/core/built/admin/assets/email-sending-status-provider-DCPkDICt.js +1 -0
  111. package/core/built/admin/assets/emails-vFMk4yYl.js +1 -0
  112. package/core/built/admin/assets/{embed-signup-form-modal-Ds6mPEi5.js → embed-signup-form-modal-DGqsORxS.js} +1 -1
  113. package/core/built/admin/assets/{explore-UY10Egsp.js → explore-nnRr1Fja.js} +1 -1
  114. package/core/built/admin/assets/feature-flag-overrides-context-DQjdJFAk.js +1 -0
  115. package/core/built/admin/assets/{feature-image-placeholder-D1iF_8bc.js → feature-image-placeholder-BrIHmPs8.js} +1 -1
  116. package/core/built/admin/assets/{feed-81C8mJWR.js → feed-BNUcNu-W.js} +1 -1
  117. package/core/built/admin/assets/feedback-DJ4Zb9rZ.js +1 -0
  118. package/core/built/admin/assets/{field-Dihp5p18.js → field-C93_Mg6j.js} +1 -1
  119. package/core/built/admin/assets/filter-sources-CGJb4C5r.js +1 -0
  120. package/core/built/admin/assets/{filters-DirqNXjH.js → filters--kKP-EC8.js} +1 -1
  121. package/core/built/admin/assets/filters-DxA_a4FP.js +1 -0
  122. package/core/built/admin/assets/{first-promoter-modal-CT6MxYZb.js → first-promoter-modal-BYDtrz2S.js} +1 -1
  123. package/core/built/admin/assets/focus-koenig-editor-on-bottom-click-BbSnGOtK.js +1 -0
  124. package/core/built/admin/assets/{ghost-8eabfc1ece81b03cf7b90780d31487e8.css → ghost-8fd5bb799356bbefb254210ba7e1236d.css} +1 -1
  125. package/core/built/admin/assets/{ghost-c2848508292937415f20f5a830eea59e.js → ghost-b4e8a403baba61905cd7560e30b9732d.js} +43 -27
  126. package/core/built/admin/assets/{ghost-dark-a7bebe2c561f55369dcf29f4c820f7ff.css → ghost-dark-cac0cb2d5bb78e9bd14d8d1c2768ed45.css} +1 -1
  127. package/core/built/admin/assets/{gift-link-modal-CQVAye17.js → gift-link-modal-B7u5bD4e.js} +1 -1
  128. package/core/built/admin/assets/{gift-links-DLDS7ljO.js → gift-links-CfLSnst2.js} +1 -1
  129. package/core/built/admin/assets/growth-Cd1uO9d2.js +1 -0
  130. package/core/built/admin/assets/growth-aG32xfdE.js +3 -0
  131. package/core/built/admin/assets/{history-modal-CFd1Hvx6.js → history-modal-Df8lW8h-.js} +1 -1
  132. package/core/built/admin/assets/hooks-Cy_-oZ4o.js +2 -0
  133. package/core/built/admin/assets/{html-field-CJBCLTvv.js → html-field-DA4eU7eq.js} +1 -1
  134. package/core/built/admin/assets/{images-scfkWZiK.js → images-KXmyO3Ss.js} +1 -1
  135. package/core/built/admin/assets/{inbox-Mcp4DXZN.js → inbox-gJHG7_xd.js} +6 -6
  136. package/core/built/admin/assets/index-BHHXtR5C.css +2 -0
  137. package/core/built/admin/assets/index-CgMCwsxN.js +4 -0
  138. package/core/built/admin/assets/index.es-CY6-yuw9.js +1 -0
  139. package/core/built/admin/assets/{input-group-CMhe2DvY.js → input-group-BE8rM2y1.js} +1 -1
  140. package/core/built/admin/assets/{integrations-Bjbu86Z0.js → integrations-B4kuRBFY.js} +1 -1
  141. package/core/built/admin/assets/{invite-user-modal-DfheMXs0.js → invite-user-modal-B4CuNcx4.js} +1 -1
  142. package/core/built/admin/assets/koenig-lexical/koenig-lexical.js +2 -2
  143. package/core/built/admin/assets/koenig-lexical/koenig-lexical.umd.js +2 -2
  144. package/core/built/admin/assets/{koenig-lexical-DBSqAuiI.js → koenig-lexical-CGXb0F8o.js} +2 -2
  145. package/core/built/admin/assets/koenig-loader-BeM5rFPX.js +2 -0
  146. package/core/built/admin/assets/{kpi-card-DBRMfGOW.js → kpi-card-B21aToe8.js} +1 -1
  147. package/core/built/admin/assets/{kpi-card-DFafD1qq.js → kpi-card-pz6Wv4Ae.js} +1 -1
  148. package/core/built/admin/assets/{kpi-helpers-Cv8i8hns.js → kpi-helpers-Dq5jelmP.js} +1 -1
  149. package/core/built/admin/assets/{kpi-tabs-BJItvLYm.js → kpi-tabs-DEZHpKUt.js} +1 -1
  150. package/core/built/admin/assets/{label-BnSCvffu.js → label-OLCzze8N.js} +1 -1
  151. package/core/built/admin/assets/label-picker-BigOvMPV.js +1 -0
  152. package/core/built/admin/assets/{labels-CH3Kn8RV.js → labels-Dr0SgUQD.js} +1 -1
  153. package/core/built/admin/assets/layout-DUTL8SH5.js +1 -0
  154. package/core/built/admin/assets/lib-7QPTI0FS.js +1 -0
  155. package/core/built/admin/assets/link-helpers-BRAg9SCj.js +1 -0
  156. package/core/built/admin/assets/links-BDHPTlyj.js +1 -0
  157. package/core/built/admin/assets/{member-custom-fields-DDQV6QeG.js → member-custom-fields-TRTHCAz9.js} +1 -1
  158. package/core/built/admin/assets/member-detail-b6dRwc3C.js +1 -0
  159. package/core/built/admin/assets/members-Czt5lJSc.js +4 -0
  160. package/core/built/admin/assets/{moderation-AgCIEso4.js → moderation-ZWefD9uH.js} +1 -1
  161. package/core/built/admin/assets/{multi-select-combobox-BcITkUVr.js → multi-select-combobox-CT13MTo-.js} +1 -1
  162. package/core/built/admin/assets/navigation-modal-C8FEhBK5.js +1 -0
  163. package/core/built/admin/assets/newsletter-5VYW4RyJ.js +1 -0
  164. package/core/built/admin/assets/newsletter-detail-modal-ChjC0ZqH.js +1 -0
  165. package/core/built/admin/assets/{newsletter-emails-DKzwafuh.js → newsletter-emails-DZH6I-PY.js} +1 -1
  166. package/core/built/admin/assets/{newsletters-BRBb_uQC.js → newsletters-DOC9KBcX.js} +1 -1
  167. package/core/built/admin/assets/newsletters-Rq1M3GD-.js +1 -0
  168. package/core/built/admin/assets/{note-DyGHtS9a.js → note-DIV-Pojr.js} +1 -1
  169. package/core/built/admin/assets/{notifications-ZgWniKna.js → notifications-s20-H49V.js} +1 -1
  170. package/core/built/admin/assets/{offers-9J1CSiLy.js → offers--e2nGvkW.js} +1 -1
  171. package/core/built/admin/assets/{offers-container-modal-B-E8TIWr.js → offers-container-modal-BmG5M5Tv.js} +1 -1
  172. package/core/built/admin/assets/onboarding-CUuy9unR.js +1 -0
  173. package/core/built/admin/assets/{onboarding-CzIsre-d.js → onboarding-pXyct0Jm.js} +1 -1
  174. package/core/built/admin/assets/{onboarding-route-CaavZulg.js → onboarding-route-CK4pcXoR.js} +1 -1
  175. package/core/built/admin/assets/overview-CaPsciMs.js +1 -0
  176. package/core/built/admin/assets/overview-a8GfcsKX.js +1 -0
  177. package/core/built/admin/assets/{page-header-De0VzKBi.js → page-header-DM_KyoFI.js} +1 -1
  178. package/core/built/admin/assets/{pagemenu-B5KKCpbA.js → pagemenu-vgZVUVKR.js} +1 -1
  179. package/core/built/admin/assets/pages-CjDY2CBI.js +1 -0
  180. package/core/built/admin/assets/pages-route-BzKZYdV5.js +1 -0
  181. package/core/built/admin/assets/{pintura-modal-BZ2J9w3n.js → pintura-modal-DExCF1ii.js} +1 -1
  182. package/core/built/admin/assets/{portal-frame-B6Hr9wHc.js → portal-frame-Cqanidq4.js} +1 -1
  183. package/core/built/admin/assets/portal-modal-oinBgA27.js +1 -0
  184. package/core/built/admin/assets/post-analytics-C5oJ1dWV.js +1 -0
  185. package/core/built/admin/assets/post-analytics-header-OATo3X_r.js +1 -0
  186. package/core/built/admin/assets/post-analytics-provider-tOpIVGT5.js +1 -0
  187. package/core/built/admin/assets/post-helpers-C88JBa4D.js +1 -0
  188. package/core/built/admin/assets/post-share-modal-DvhC1XgV.js +1 -0
  189. package/core/built/admin/assets/post-utils-DKF4mfuo.js +1 -0
  190. package/core/built/admin/assets/posts-list-screen-o4ZjbgS3.js +2 -0
  191. package/core/built/admin/assets/posts-pCPrhQeR.js +1 -0
  192. package/core/built/admin/assets/posts-route-9F--xdIb.js +1 -0
  193. package/core/built/admin/assets/{preferences-C5YJLp74.js → preferences--vNubsqD.js} +2 -2
  194. package/core/built/admin/assets/{preview-modal-BfeFqi5y.js → preview-modal-YYbzlYdO.js} +1 -1
  195. package/core/built/admin/assets/profile-BllKV3dR.js +1 -0
  196. package/core/built/admin/assets/radio-group-DL8GI8rt.js +1 -0
  197. package/core/built/admin/assets/{referrers-CnhCMWCs.js → referrers-D8oHPmDB.js} +1 -1
  198. package/core/built/admin/assets/router-provider-BSvTXgZY.js +1 -0
  199. package/core/built/admin/assets/schemas-BoYdB6YU.js +64 -0
  200. package/core/built/admin/assets/{select-cb0t_TAJ.js → select-v5YbA3Mw.js} +1 -1
  201. package/core/built/admin/assets/settings-PEsZupw1.js +4 -0
  202. package/core/built/admin/assets/{settings-breadcrumbs-DLzbRRSt.js → settings-breadcrumbs-NwPnCTC7.js} +1 -1
  203. package/core/built/admin/assets/{settings-DZqxR0Da.js → settings-u_s1CRkr.js} +1 -1
  204. package/core/built/admin/assets/{share-modal-D2-Bz1_I.js → share-modal-SskCmVGL.js} +1 -1
  205. package/core/built/admin/assets/{slack-modal-DYDTUria.js → slack-modal-XxSJiYgo.js} +1 -1
  206. package/core/built/admin/assets/{sort-button-VVeQjjbu.js → sort-button-Cx1KtINE.js} +1 -1
  207. package/core/built/admin/assets/{source-icon-Ck5_5Kgq.js → source-icon-Bdp9Im_5.js} +1 -1
  208. package/core/built/admin/assets/stats-D9PDLS3x.js +1 -0
  209. package/core/built/admin/assets/stats-view-W2g6Jsd-.js +1 -0
  210. package/core/built/admin/assets/{step-1-CsaBjeN4.js → step-1-BQYzvBzr.js} +1 -1
  211. package/core/built/admin/assets/{step-2-D2vnxOOM.js → step-2-xES32xJV.js} +1 -1
  212. package/core/built/admin/assets/{step-3-wBoLdGEb.js → step-3-DA_XK5kW.js} +2 -2
  213. package/core/built/admin/assets/{stripe-button-CDgLz0S0.js → stripe-button-CVsLHelt.js} +1 -1
  214. package/core/built/admin/assets/{stripe-connect-modal-CSjMJetP.js → stripe-connect-modal-ClmLOMGS.js} +1 -1
  215. package/core/built/admin/assets/style-Wd9nQubI.css +1 -0
  216. package/core/built/admin/assets/{table-Do6iQ83Q.js → table-BenqVupI.js} +1 -1
  217. package/core/built/admin/assets/{tabs-D2yWLMp_.js → tabs-eBBlxPp8.js} +1 -1
  218. package/core/built/admin/assets/tag-detail-Ce8Se2qd.js +2 -0
  219. package/core/built/admin/assets/tag-picker-C3UR-uJ-.js +1 -0
  220. package/core/built/admin/assets/tags-B-kJxCs7.js +1 -0
  221. package/core/built/admin/assets/{tags-zTFiKRpb.js → tags-ChfdwJyS.js} +1 -1
  222. package/core/built/admin/assets/{testimonials-modal-CtnZBJKl.js → testimonials-modal-9Q6fT06V.js} +1 -1
  223. package/core/built/admin/assets/tier-detail-modal-CDyYdqK7.js +1 -0
  224. package/core/built/admin/assets/tiers-BCpIOGQr.js +1 -0
  225. package/core/built/admin/assets/{toggle-group-ByUJsxwD.js → toggle-group-CviIkyok.js} +1 -1
  226. package/core/built/admin/assets/{topic-filter-BgC3g5_v.js → topic-filter-I2jCBGxm.js} +1 -1
  227. package/core/built/admin/assets/{transistor-modal-Drr0SNfo.js → transistor-modal-p53u3W8y.js} +1 -1
  228. package/core/built/admin/assets/{trend-badge-6ye93YAW.js → trend-badge-CideVzQd.js} +1 -1
  229. package/core/built/admin/assets/{unsplash-modal-p6AoQoWp.js → unsplash-modal-DY8UcKcE.js} +1 -1
  230. package/core/built/admin/assets/{use-analytics-data-CWCMAESo.js → use-analytics-data-DAIGcr2f.js} +1 -1
  231. package/core/built/admin/assets/{use-check-theme-limit-error-Cw3WQHy8.js → use-check-theme-limit-error-DRUjK4YM.js} +1 -1
  232. package/core/built/admin/assets/use-filter-params-JkZhIS8L.js +1 -0
  233. package/core/built/admin/assets/{use-filterable-api-CzXcpUh8.js → use-filterable-api-BVEVMrhZ.js} +1 -1
  234. package/core/built/admin/assets/{use-growth-stats-DCVG3s9w.js → use-growth-stats-937CUj6j.js} +1 -1
  235. package/core/built/admin/assets/use-host-limits-D0Dv3tKA.js +1 -0
  236. package/core/built/admin/assets/{use-limiter-D2WRRx0H.js → use-limiter-CohWfzvK.js} +1 -1
  237. package/core/built/admin/assets/{use-navigate-with-base-path-BHPA228f.js → use-navigate-with-base-path-BkxcPj5l.js} +1 -1
  238. package/core/built/admin/assets/use-pintura-config-xgytjU35.js +1 -0
  239. package/core/built/admin/assets/{use-pintura-editor-BfN1UwzH.js → use-pintura-editor-CaV1mbfO.js} +1 -1
  240. package/core/built/admin/assets/{use-post-referrers-Czg47m8s.js → use-post-referrers-BCQI7fDg.js} +1 -1
  241. package/core/built/admin/assets/{use-reply-chain-data-ns0caK8k.js → use-reply-chain-data-CYRhoaxY.js} +1 -1
  242. package/core/built/admin/assets/{use-router-history-entry-uldn7zJO.js → use-router-history-entry-NOKcd--l.js} +1 -1
  243. package/core/built/admin/assets/{use-setting-group-DpcuCUDg.js → use-setting-group-bLKMwoBT.js} +1 -1
  244. package/core/built/admin/assets/{use-settings-navigation-CZjGrhsp.js → use-settings-navigation-B-qrriKD.js} +1 -1
  245. package/core/built/admin/assets/{use-simple-pagination-DzJWobPR.js → use-simple-pagination-CNPd6Rf6.js} +1 -1
  246. package/core/built/admin/assets/use-staff-users-pRIMIyiW.js +1 -0
  247. package/core/built/admin/assets/{use-tinybird-query-CSnGXzZh.js → use-tinybird-query-CmdbCS9X.js} +1 -1
  248. package/core/built/admin/assets/{use-tinybird-token-DTOKRR7e.js → use-tinybird-token-KLne235s.js} +1 -1
  249. package/core/built/admin/assets/{use-unsaved-changes-guard-CBzs-KPi.js → use-unsaved-changes-guard-7-ug0JdH.js} +1 -1
  250. package/core/built/admin/assets/use-upgrade-route-Dm_qqKr0.js +1 -0
  251. package/core/built/admin/assets/{use-url-input-DFr8lCbS.js → use-url-input-fvp-TpPx.js} +1 -1
  252. package/core/built/admin/assets/user-detail-modal-D3KlGYv-.js +1 -0
  253. package/core/built/admin/assets/{users-Cg-OeGzC.js → users-DVNWrqg9.js} +1 -1
  254. package/core/built/admin/assets/{vendor-5753232c7d6ffb3c44e1eb0a02133953.js → vendor-2dd263291938d407802568d3357ec69e.js} +19 -17
  255. package/core/built/admin/assets/{virtual-list-BW-padMe.js → virtual-list-CZ3RK2Yf.js} +1 -1
  256. package/core/built/admin/assets/{web-C1v33ehA.js → web-ClEJsCAj.js} +2 -2
  257. package/core/built/admin/assets/web-X9rdnrtq.js +1 -0
  258. package/core/built/admin/assets/{zapier-modal-BBFfI6Ml.js → zapier-modal-DfVhV17j.js} +1 -1
  259. package/core/built/admin/index.html +19 -18
  260. package/core/server/adapters/jobs/InMemoryJobsBackend.js +74 -29
  261. package/core/server/api/endpoints/authentication.js +1 -2
  262. package/core/server/api/endpoints/authors-public.js +15 -5
  263. package/core/server/api/endpoints/emails.js +13 -0
  264. package/core/server/api/endpoints/index.js +8 -0
  265. package/core/server/api/endpoints/member-metafields-members.js +23 -0
  266. package/core/server/api/endpoints/member-metafields.js +33 -20
  267. package/core/server/api/endpoints/members-account.js +42 -0
  268. package/core/server/api/endpoints/newsletters-public.js +10 -1
  269. package/core/server/api/endpoints/pages-public.js +15 -5
  270. package/core/server/api/endpoints/posts-public.js +15 -5
  271. package/core/server/api/endpoints/tags-public.js +22 -3
  272. package/core/server/api/endpoints/tiers-checkout-config.js +2 -2
  273. package/core/server/api/endpoints/tiers-public.js +38 -1
  274. package/core/server/api/endpoints/users.js +2 -2
  275. package/core/server/api/endpoints/utils/api-filter-utils.js +170 -3
  276. package/core/server/api/endpoints/utils/public-cache-keys.js +3 -0
  277. package/core/server/api/endpoints/utils/serializers/input/authors.js +2 -0
  278. package/core/server/api/endpoints/utils/serializers/input/members.js +16 -2
  279. package/core/server/api/endpoints/utils/serializers/input/pages.js +2 -0
  280. package/core/server/api/endpoints/utils/serializers/input/posts.js +2 -0
  281. package/core/server/api/endpoints/utils/serializers/input/tags.js +2 -0
  282. package/core/server/api/endpoints/utils/serializers/output/emails.js +7 -0
  283. package/core/server/api/endpoints/utils/serializers/output/index.js +4 -0
  284. package/core/server/api/endpoints/utils/serializers/output/member-metafields.js +3 -3
  285. package/core/server/api/endpoints/utils/serializers/output/members-account.js +19 -0
  286. package/core/server/api/endpoints/utils/serializers/output/members-csv-transform.js +1 -1
  287. package/core/server/api/endpoints/utils/serializers/output/tiers.js +10 -2
  288. package/core/server/api/endpoints/utils/serializers/output/users.js +0 -10
  289. package/core/server/data/exporter/table-lists.js +3 -3
  290. package/core/server/data/migrations/versions/6.53/2026-07-15-20-22-53-add-members-custom-field-values.js +1 -1
  291. package/core/server/data/migrations/versions/6.57/2026-08-04-18-00-00-store-custom-field-values-as-leaf-rows.js +10 -1
  292. package/core/server/data/migrations/versions/6.63/2026-09-03-10-07-03-rename-custom-field-tables-to-metafields.js +169 -0
  293. package/core/server/data/migrations/versions/6.63/2026-09-03-11-03-31-remove-member-custom-field-read-permissions.js +30 -0
  294. package/core/server/data/schema/fixtures/fixtures.json +0 -11
  295. package/core/server/data/schema/lib/default-index-name.js +8 -11
  296. package/core/server/data/schema/schema.js +18 -18
  297. package/core/server/data/seeders/README.md +48 -0
  298. package/core/server/data/tinybird/pipes/mv_hits.pipe +86 -50
  299. package/core/server/lib/db-types/count.js +16 -0
  300. package/core/server/lib/validate-password.js +81 -120
  301. package/core/server/models/action.js +4 -4
  302. package/core/server/models/base/plugins/filtered-collection.js +16 -0
  303. package/core/server/models/member.js +6 -6
  304. package/core/server/models/user.js +1 -1
  305. package/core/server/services/automations/automations-api.js +1 -1
  306. package/core/server/services/automations/database-automations-repository.js +11 -4
  307. package/core/server/services/email-service/CONTEXT.md +37 -0
  308. package/core/server/services/email-service/README.md +42 -0
  309. package/core/server/services/email-service/batch-sending-service.js +2 -0
  310. package/core/server/services/email-service/email-controller.js +18 -2
  311. package/core/server/services/email-service/email-service-wrapper.js +3 -0
  312. package/core/server/services/email-service/sending-status-schema.js +21 -0
  313. package/core/server/services/email-service/sending-status-serializers.js +33 -0
  314. package/core/server/services/email-service/sending-status-service.js +47 -0
  315. package/core/server/services/email-service/sending-status.js +111 -0
  316. package/core/server/services/email-suppression-list/email-suppression-list.js +0 -33
  317. package/core/server/services/email-suppression-list/mailgun-email-suppression-list.js +6 -7
  318. package/core/server/services/gifts/README.md +2 -2
  319. package/core/server/services/gifts/constants.js +1 -1
  320. package/core/server/services/gifts/gift-service.js +19 -57
  321. package/core/server/services/gifts/index.js +0 -2
  322. package/core/server/services/jobs-service/index.js +8 -0
  323. package/core/server/services/jobs-service/jobs-service.js +52 -3
  324. package/core/server/services/jobs-service/register-job-handlers.js +13 -2
  325. package/core/server/services/members/account-service.js +98 -0
  326. package/core/server/services/members/api.js +4 -4
  327. package/core/server/services/members/import-export/export/exporter.js +20 -20
  328. package/core/server/services/members/import-export/import/completion-email.js +6 -6
  329. package/core/server/services/members/import-export/import/importer.js +13 -13
  330. package/core/server/services/members/import-export/index.js +7 -7
  331. package/core/server/services/members/members-api/members-api.js +26 -6
  332. package/core/server/services/members/members-api/repositories/member-repository.js +4 -4
  333. package/core/server/services/members/members-api/services/member-bread-service.js +45 -39
  334. package/core/server/services/members/members-ssr.js +18 -0
  335. package/core/server/services/members/middleware.js +95 -81
  336. package/core/server/services/members/service.js +70 -42
  337. package/core/server/services/members/utils.js +9 -0
  338. package/core/server/services/members-metafields/access.js +28 -0
  339. package/core/server/services/{members-custom-fields → members-metafields}/actions.js +5 -5
  340. package/core/server/services/members-metafields/bindings-service.js +147 -0
  341. package/core/server/services/{members-custom-fields → members-metafields}/codec.js +4 -4
  342. package/core/server/services/{members-custom-fields → members-metafields}/config.js +1 -1
  343. package/core/server/services/{members-custom-fields → members-metafields}/definitions-service.js +17 -23
  344. package/core/server/services/{members-custom-fields → members-metafields}/filter.js +9 -9
  345. package/core/server/services/{members-custom-fields → members-metafields}/index.js +16 -7
  346. package/core/server/services/{members-custom-fields → members-metafields}/key.js +1 -1
  347. package/core/server/services/{members-custom-fields → members-metafields}/models.js +4 -4
  348. package/core/server/services/members-metafields/namespaces.js +34 -0
  349. package/core/server/services/{members-custom-fields → members-metafields}/queries.js +1 -1
  350. package/core/server/services/{members-custom-fields → members-metafields}/schema.js +16 -12
  351. package/core/server/services/{members-custom-fields → members-metafields}/serializers.js +6 -6
  352. package/core/server/services/{members-custom-fields → members-metafields}/values-service.js +32 -22
  353. package/core/server/services/mentions/mention-sending-service.js +26 -9
  354. package/core/server/services/mentions/send-webmentions-job.js +18 -0
  355. package/core/server/services/mentions/service.js +1 -31
  356. package/core/server/services/stripe/services/webhook/checkout-session-event-service.js +2 -2
  357. package/core/server/services/stripe/stripe-service.js +4 -4
  358. package/core/server/services/tier-checkout-config/codec.js +2 -2
  359. package/core/server/services/tier-checkout-config/index.js +2 -1
  360. package/core/server/services/tier-checkout-config/models.js +2 -2
  361. package/core/server/services/tier-checkout-config/queries.js +8 -8
  362. package/core/server/services/tier-checkout-config/serializers.js +57 -0
  363. package/core/server/services/tier-checkout-config/service.js +1 -1
  364. package/core/server/services/tiers/service.js +3 -3
  365. package/core/server/services/url/router-filter.js +8 -10
  366. package/core/server/services/users.js +1 -19
  367. package/core/server/web/api/endpoints/admin/routes.js +1 -0
  368. package/core/server/web/members/account/index.js +2 -0
  369. package/core/server/web/members/account/routes.js +46 -0
  370. package/core/server/web/members/app.js +4 -18
  371. package/core/shared/config/defaults.json +1 -1
  372. package/core/shared/labs.js +4 -2
  373. package/package.json +22 -22
  374. package/pnpm-lock.yaml +513 -571
  375. package/pnpm-workspace.yaml +12 -12
  376. package/components/tryghost-custom-field-types-0.0.0.tgz +0 -0
  377. package/core/built/admin/assets/activitypub/layout-2-0bw6HN.js +0 -1
  378. package/core/built/admin/assets/automated-emails-D5VVMND9.js +0 -1
  379. package/core/built/admin/assets/automations-CzKt5fb8.js +0 -1
  380. package/core/built/admin/assets/chunk.598.7e056fabb47ce7dbd73f.js +0 -366
  381. package/core/built/admin/assets/comments-BLmCmyCs.js +0 -1
  382. package/core/built/admin/assets/custom-field-type-option-BddFlJFa.js +0 -1
  383. package/core/built/admin/assets/design-and-theme-modal-BSmo12Op.js +0 -2
  384. package/core/built/admin/assets/edit-profile-C5Asm4LA.js +0 -1
  385. package/core/built/admin/assets/editor-REokrzci.js +0 -8
  386. package/core/built/admin/assets/filter-sources-BO9xUPj7.js +0 -1
  387. package/core/built/admin/assets/filters-CRUWecfY.js +0 -1
  388. package/core/built/admin/assets/growth-BWIu-6xj.js +0 -3
  389. package/core/built/admin/assets/growth-DU29oxeA.js +0 -1
  390. package/core/built/admin/assets/hooks-CuEZV2-q.js +0 -2
  391. package/core/built/admin/assets/index-6MkPdCtr.js +0 -4
  392. package/core/built/admin/assets/index-Bn7QhcZu.css +0 -2
  393. package/core/built/admin/assets/index.es-CNnuNH0d.js +0 -1
  394. package/core/built/admin/assets/koenig-loader-aFQNlJlD.js +0 -2
  395. package/core/built/admin/assets/label-picker-KVoo91sh.js +0 -1
  396. package/core/built/admin/assets/layout-Bjv2Ll-5.js +0 -1
  397. package/core/built/admin/assets/link-helpers-MVDdnFCY.js +0 -1
  398. package/core/built/admin/assets/member-detail-CdJF6Agw.js +0 -1
  399. package/core/built/admin/assets/members-DjQbq9Z2.js +0 -4
  400. package/core/built/admin/assets/navigation-modal-BkT7b1M2.js +0 -1
  401. package/core/built/admin/assets/newsletter-BMMAuvgq.js +0 -1
  402. package/core/built/admin/assets/newsletter-detail-modal-0SCJ7Zpm.js +0 -1
  403. package/core/built/admin/assets/newsletters-DhNigJUh.js +0 -1
  404. package/core/built/admin/assets/onboarding-qg8Akovm.js +0 -1
  405. package/core/built/admin/assets/overview-BW8GLeYi.js +0 -1
  406. package/core/built/admin/assets/overview-BkXZNzaZ.js +0 -1
  407. package/core/built/admin/assets/pages-jgaFm69d.js +0 -1
  408. package/core/built/admin/assets/pages-route-CIUAQxtY.js +0 -1
  409. package/core/built/admin/assets/portal-modal-D4ceei3t.js +0 -1
  410. package/core/built/admin/assets/post-analytics-header-BYCsT0GP.js +0 -1
  411. package/core/built/admin/assets/post-analytics-ot7f6pih.js +0 -1
  412. package/core/built/admin/assets/post-analytics-provider-Bo1gmYaP.js +0 -1
  413. package/core/built/admin/assets/post-helpers-C5OQMBoi.js +0 -1
  414. package/core/built/admin/assets/post-share-modal-C-PaYZ_e.js +0 -1
  415. package/core/built/admin/assets/posts-DuGazgTb.js +0 -1
  416. package/core/built/admin/assets/posts-list-screen-CBGGgjjj.js +0 -2
  417. package/core/built/admin/assets/posts-route-D6xmS7Vf.js +0 -1
  418. package/core/built/admin/assets/profile-B8mx2yAu.js +0 -1
  419. package/core/built/admin/assets/radio-group-DczlLKOn.js +0 -1
  420. package/core/built/admin/assets/router-provider-B0gZyiGJ.js +0 -1
  421. package/core/built/admin/assets/schemas-DppqmpeJ.js +0 -64
  422. package/core/built/admin/assets/settings-DvfTNdHQ.js +0 -4
  423. package/core/built/admin/assets/stats-Rjmk5owg.js +0 -1
  424. package/core/built/admin/assets/stats-view-BGGmkmgv.js +0 -1
  425. package/core/built/admin/assets/tag-detail-BhXlOsCa.js +0 -2
  426. package/core/built/admin/assets/tags-ldukRApe.js +0 -1
  427. package/core/built/admin/assets/tier-detail-modal-BOs8e_G8.js +0 -1
  428. package/core/built/admin/assets/tiers-Nd_z4BZY.js +0 -1
  429. package/core/built/admin/assets/use-filter-params-BIni9taJ.js +0 -1
  430. package/core/built/admin/assets/use-host-limits-DZtR08oa.js +0 -1
  431. package/core/built/admin/assets/use-pintura-config-h-J0Lvta.js +0 -1
  432. package/core/built/admin/assets/use-staff-users-Csipb-O0.js +0 -1
  433. package/core/built/admin/assets/use-upgrade-route-DhRSo7at.js +0 -1
  434. package/core/built/admin/assets/user-detail-modal-B_iUClI6.js +0 -1
  435. package/core/built/admin/assets/web-C4BKzn2T.js +0 -1
  436. package/core/server/services/email-suppression-list/in-memory-email-suppression-list.js +0 -39
  437. package/core/server/services/members-custom-fields/bindings-service.js +0 -120
  438. /package/core/built/admin/assets/{chunk.492.f24d855d7e3f3aad261c.js.LICENSE.txt → chunk.901.4ccc639821020230bcca.js.LICENSE.txt} +0 -0
  439. /package/core/server/services/{members-custom-fields → members-metafields}/storage.js +0 -0
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{f as n}from"./hooks-CuEZV2-q.js";import{s as r}from"./config-DOMQDZGZ.js";import{ii as i,ti as a}from"./index-6MkPdCtr.js";var o=e(t(),1),s=e=>{if(e!=null){if(typeof e==`string`)return e;throw TypeError(`Expected value to be null, undefined, or a string`)}},c=e=>{if(e.startsWith(`/`)){let{adminRoot:t}=n();return window.location.origin+t.replace(/\/$/,``)+e}return e};function l(){let{data:e}=r(),{data:t}=i(),n=e?.config?.pintura,[l,u,d]=a(t?.settings??null,[`pintura`,`pintura_js_url`,`pintura_css_url`]),f,p;return l&&(f=n?.js||s(u),p=n?.css||s(d)),(0,o.useMemo)(()=>!f||!p?null:{jsUrl:c(f),cssUrl:c(p)},[f,p])}export{l 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{l as r,o as i}from"./dist-B3keLvjj.js";import{t as a}from"./grid-Dj29PY05.js";import{t as o}from"./inline-BWSs_VzR.js";import{t as s}from"./stack-B2eszIiq.js";import{t as c}from"./text-BQDSDsKs.js";import{f as l}from"./users-Cg-OeGzC.js";import{i as u,n as d}from"./use-limiter-D2WRRx0H.js";import{t as f}from"./validator-Cr0sMKuW.js";import{n as p}from"./global-data-context-gAMDH9u1.js";var m=e(t(),1),h=n(),g=i(`group/setting-group relative flex flex-col gap-6 rounded-xl text-card-foreground transition-all`,{variants:{variant:{outline:`border border-border-default bg-card p-5 hover:shadow-sm md:p-7`,plain:`bg-transparent`},highlighted:{true:`shadow-sm`,false:``}},defaultVariants:{variant:`outline`,highlighted:!1}}),_=m.forwardRef(({className:e,variant:t,highlighted:n,editing:i=!1,...a},o)=>(0,h.jsx)(`div`,{ref:o,className:r(g({variant:t,highlighted:n,className:e})),"data-editing":i,...a}));_.displayName=`SettingGroup`;var v=m.forwardRef(({className:e,...t},n)=>(0,h.jsx)(o,{ref:n,align:`start`,as:`div`,className:r(`relative z-10 w-full`,e),gap:`lg`,justify:`between`,...t}));v.displayName=`SettingGroupHeader`;var y=m.forwardRef(({className:e,...t},n)=>(0,h.jsx)(s,{ref:n,className:r(`min-w-0`,e),gap:`xs`,...t}));y.displayName=`SettingGroupDetails`;var b=m.forwardRef(({className:e,...t},n)=>(0,h.jsx)(c,{ref:n,as:`h5`,className:r(`md:text-lg`,e),leading:`supertight`,weight:`semibold`,...t}));b.displayName=`SettingGroupTitle`;var x=m.forwardRef(({className:e,...t},n)=>(0,h.jsx)(c,{ref:n,className:r(`mr-5 hidden text-pretty group-data-[editing=false]/setting-group:block md:block`,e),...t}));x.displayName=`SettingGroupDescription`;var S=m.forwardRef(({className:e,...t},n)=>(0,h.jsx)(`div`,{ref:n,className:r(`shrink-0 [&_button]:text-control!`,e),...t}));S.displayName=`SettingGroupActions`;var C=m.forwardRef(({children:e,className:t,columns:n=1,...i},o)=>n===2?(0,h.jsx)(a,{ref:o,className:r(`grid-cols-1 gap-x-8 gap-y-6 md:grid-cols-2`,t),columns:1,gap:`none`,...i,children:e}):(0,h.jsx)(s,{ref:o,className:r(`gap-y-7`,t),gap:`none`,...i,children:e}));C.displayName=`SettingGroupContent`;var w=m.forwardRef(({className:e,...t},n)=>(0,h.jsx)(s,{ref:n,className:e,gap:`none`,...t}));w.displayName=`SettingGroupValue`;var T=m.forwardRef(({className:e,...t},n)=>(0,h.jsx)(c,{ref:n,as:`h6`,className:r(`text-base`,e),weight:`semibold`,...t}));T.displayName=`SettingGroupValueTitle`;var E=m.forwardRef(({className:e,...t},n)=>(0,h.jsx)(o,{ref:n,as:`div`,className:e,gap:`none`,...t}));E.displayName=`SettingGroupValueContent`;var D=e(f(),1),O=e=>e.replace(/[\\\]^-]/g,`\\$&`),ee=e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),k=e=>{if(e.patterns){let t=e.patterns;return e=>t.some(t=>t.test(e))}let t=`a-zA-Z0-9${e.unicode?`\\p{L}\\p{M}\\p{N}`:``}${O(e.extra??``)}`,n=RegExp(`^[${t}]+$`,`u`),r=e.min??1,i=e.max??100;return t=>{let[a,...o]=e.nestedSegments?t.split(`/`):[t];if(!n.test(a))return!1;let s=[...a].length;if(s<r||s>i)return!1;for(let t of e.notAtBoundary??``)if(a.startsWith(t)||a.endsWith(t))return!1;for(let t of e.notConsecutive??``)if(a.includes(t+t))return!1;return o.every(e=>e===``||n.test(e))}},te=e=>{try{return decodeURIComponent(e)}catch{return e}},A=e=>{let{domains:t,www:n,regionalSubdomain:r,pathTypes:i,fullPath:a,transformUsername:o,errors:s}=e,c=i.map(e=>({...e,check:k(e.rule)})),l=[...c].sort((e,t)=>t.urlPrefix.length-e.urlPrefix.length),u=c.flatMap(e=>[e.storagePrefix,...e.handleAliases??[]].filter(e=>e!==``).map(t=>({prefix:t,pathType:e}))).sort((e,t)=>t.prefix.length-e.prefix.length),d=t.map(e=>ee(e)).join(`|`),f=`${r?`(?:(?<region>${r})\\.)?`:``}(?:[a-zA-Z0-9-]+\\.)*`,p=RegExp(`^(?:(?:https?:)?\\/\\/)?${f}(?:${d})\\/(?<rest>[\\s\\S]*)$`,`i`),m=RegExp(`^${f}(?:${d})(?:\\/|$)`,`i`),h=e=>/^(?:https?:\/\/|\/\/|www\.)/i.test(e)||m.test(e),g=(e,t)=>{let n=t?e:e.replace(/^@/,``);return n=n.replace(/\/$/,``),a||(n=te(n)),n=n.normalize(`NFC`),o?o(n):n},_=e=>{let t=e.replace(/^\//,``),n=u.find(({prefix:e})=>t.startsWith(e));return n?{pathType:n.pathType,rawUsername:t.slice(n.prefix.length),atPrefixConsumed:!n.pathType.tolerateLeadingAt}:{pathType:c[0],rawUsername:t,atPrefixConsumed:!1}},v=e=>{if(!h(e))return _(e);let t=e.match(p);if(!t?.groups)throw Error(s.invalidUrl);let{region:n,rest:r}=t.groups,i=l.find(e=>r.startsWith(e.urlPrefix));if(!i||r.length<=i.urlPrefix.length)throw Error(s.invalidUrl);let o=r.slice(i.urlPrefix.length),c=!a&&!i.rule.nestedSegments?o.split(`/`)[0]:o;if(!a&&/[?#]/.test(c))throw Error(s.invalidUsername);return{region:n,pathType:i,rawUsername:c,atPrefixConsumed:i.urlPrefix!==``&&!i.tolerateLeadingAt}},y=(e,t)=>{if(!e.check(t))throw Error(s.invalidUsername)},b=(e,r,i)=>{let a=`https://${i?`${i.toLowerCase()}.`:n?`www.`:``}${t[0]}/${e.urlPrefix}${r}`;if(!D.default.isURL(a))throw Error(s.invalidUrl);return a};return{validate:e=>{if(!e)return``;let{region:t,pathType:n,rawUsername:r,atPrefixConsumed:i}=v(e.trim()),a=g(r,i);return y(n,a),b(n,a,t)},handleToUrl:e=>{if(!e)throw Error(s.invalidUsername);let{pathType:t,rawUsername:n,atPrefixConsumed:r}=_(e.trim()),i=g(n,r);return y(t,i),b(t,i)},urlToHandle:e=>{if(!e||!h(e.trim()))return null;try{let{pathType:t,rawUsername:n,atPrefixConsumed:r}=v(e.trim()),i=g(n,r);return y(t,i),`${t.storagePrefix}${i}`}catch{return null}}}},j=`The URL must be in a format like https://www.facebook.com/yourPage`,M=A({domains:[`facebook.com`],www:!0,fullPath:!0,pathTypes:[{urlPrefix:``,storagePrefix:``,rule:{patterns:[/^\S+$/]}}],errors:{invalidUrl:j,invalidUsername:j}}),ne=M.validate,re=M.handleToUrl,ie=M.urlToHandle,N=A({domains:[`x.com`,`twitter.com`],www:!1,pathTypes:[{urlPrefix:``,storagePrefix:`@`,rule:{extra:`_`,min:1,max:15}}],errors:{invalidUrl:`The URL must be in a format like https://x.com/yourUsername`,invalidUsername:`Your Username is not a valid Twitter Username`}}),ae=N.validate,oe=N.handleToUrl,P=N.urlToHandle,F={extra:`._`,min:1,max:30,notAtBoundary:`.`,notConsecutive:`.`},I=A({domains:[`instagram.com`],www:!0,pathTypes:[{urlPrefix:``,storagePrefix:``,rule:F}],errors:{invalidUrl:`The URL must be in a format like https://www.instagram.com/yourUsername`,invalidUsername:`Your Username is not a valid Instagram Username`}}),se=I.validate,ce=I.handleToUrl,L=I.urlToHandle,R=A({domains:[`threads.net`,`threads.com`],www:!0,pathTypes:[{urlPrefix:`@`,storagePrefix:`@`,rule:F},{urlPrefix:``,storagePrefix:`@`,rule:F}],errors:{invalidUrl:`The URL must be in a format like https://www.threads.net/@yourUsername`,invalidUsername:`The URL must be in a format like https://www.threads.net/@yourUsername`}}),z=R.validate,B=R.handleToUrl,V=R.urlToHandle,H=A({domains:[`bsky.app`],www:!1,pathTypes:[{urlPrefix:`profile/`,storagePrefix:``,tolerateLeadingAt:!0,rule:{patterns:[/^did:plc:[a-z2-7]{24}$/,/^[a-zA-Z0-9._]{1,15}$/,/^(?=.{1,191}$)[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+$/]}}],transformUsername:e=>/^did:plc:/i.test(e)?e.toLowerCase():e,errors:{invalidUrl:`The URL must be in a format like https://bsky.app/profile/yourUsername`,invalidUsername:`Your Username is not a valid Bluesky Username`}}),U=H.validate,W=H.handleToUrl,G=H.urlToHandle,K={unicode:!0,extra:`-`,min:3,max:100},q=A({domains:[`linkedin.com`],www:!0,regionalSubdomain:`[a-z]{2}`,pathTypes:[{urlPrefix:`in/`,storagePrefix:``,handleAliases:[`in/`],rule:K},{urlPrefix:`pub/`,storagePrefix:`pub/`,rule:{...K,nestedSegments:!0}},{urlPrefix:`company/`,storagePrefix:`company/`,rule:K},{urlPrefix:`school/`,storagePrefix:`school/`,rule:K}],errors:{invalidUrl:`The URL must be in a format like https://www.linkedin.com/in/yourUsername`,invalidUsername:`Your Username is not a valid LinkedIn Username`}}),le=q.validate,ue=q.handleToUrl,de=q.urlToHandle,J=A({domains:[`youtube.com`],www:!0,pathTypes:[{urlPrefix:`@`,storagePrefix:`@`,rule:{unicode:!0,extra:`._-`,min:3,max:30,notAtBoundary:`._-`,notConsecutive:`.`}},{urlPrefix:`user/`,storagePrefix:`user/`,rule:{extra:`._-`,min:1,max:50}},{urlPrefix:`channel/`,storagePrefix:`channel/`,rule:{patterns:[/^UC[a-zA-Z0-9_-]{22}$/]}}],errors:{invalidUrl:`The URL must be in a format like https://www.youtube.com/@yourUsername, https://www.youtube.com/user/yourUsername, or https://www.youtube.com/channel/yourChannelId`,invalidUsername:`Your Username is not a valid YouTube Username`}}),fe=J.validate,pe=J.handleToUrl,me=J.urlToHandle,Y=A({domains:[`tiktok.com`],www:!0,pathTypes:[{urlPrefix:`@`,storagePrefix:`@`,rule:{extra:`._`,min:2,max:24,notAtBoundary:`.`,notConsecutive:`.`}}],errors:{invalidUrl:`The URL must be in a format like https://www.tiktok.com/@yourUsername`,invalidUsername:`Your Username is not a valid TikTok Username`}}),he=Y.validate,ge=Y.handleToUrl,_e=Y.urlToHandle;function ve(e){let t=`The URL must be in a format like @username@instance.tld or https://instance.tld/@username or https://website.com/@username@instance.tld`;if(!e)return``;let n=e;if(n=n.replace(/^https?:\/\//,``),n.match(/^@[^@]+@[^/]+$/)){let[e,r]=n.split(`@`).slice(1);if(!D.default.isFQDN(r))throw Error(t);return`https://${r}/@${e}`}if(n.match(/^[^/]+\.[^/]+\/@[^/]+(@[^/]+)?$/)){let[e,r]=n.split(`/@`);if(!D.default.isFQDN(e))throw Error(t);if(r.includes(`@`)){let[,e]=r.split(`@`);if(!D.default.isFQDN(e))throw Error(t)}return`https://${n}`}throw Error(t)}var ye=e=>{let t=`Your Username is not a valid Mastodon Username`;if(!e)throw Error(t);if(e.match(/^@[^@]+@[^/]+$/)){let[n,r]=e.split(`@`).slice(1);if(!D.default.isFQDN(r))throw Error(t);return`https://${r}/@${n}`}if(e.match(/^[^/]+\.[^/]+\/@[^/]+(@[^/]+)?$/)){let[n,r]=e.split(`/@`);if(!D.default.isFQDN(n))throw Error(t);if(r.includes(`@`)){let[,e]=r.split(`@`);if(!D.default.isFQDN(e))throw Error(t)}return`https://${e}`}throw Error(t)},be=e=>e.replace(/^https?:\/\//,``),xe=[`twitter`,`facebook`,`linkedin`,`bluesky`,`threads`,`mastodon`,`tiktok`,`youtube`,`instagram`],X=(e,t)=>{if(!e)return``;try{return t(e)}catch{return e}},Z=[{key:`twitter`,staffTitle:`X`,publicationTitle:`X`,placeholder:`https://x.com/username`,testId:`x-input`,validate:ae,toDisplayValue:e=>X(e,oe),toStoredValue:e=>P(e)},{key:`facebook`,staffTitle:`Facebook`,publicationTitle:`Facebook`,placeholder:`https://www.facebook.com/username`,testId:`facebook-input`,validate:ne,toDisplayValue:e=>X(e,re),toStoredValue:e=>ie(e)},{key:`linkedin`,staffTitle:`LinkedIn`,publicationTitle:`LinkedIn`,placeholder:`https://www.linkedin.com/in/username`,testId:`linkedin-input`,validate:le,toDisplayValue:e=>X(e,ue),toStoredValue:e=>de(e)},{key:`bluesky`,staffTitle:`Bluesky`,publicationTitle:`Bluesky`,placeholder:`https://bsky.app/profile/username`,testId:`bluesky-input`,validate:U,toDisplayValue:e=>X(e,W),toStoredValue:e=>G(e)},{key:`threads`,staffTitle:`Threads`,publicationTitle:`Threads`,placeholder:`https://threads.net/@username`,testId:`threads-input`,validate:z,toDisplayValue:e=>X(e,B),toStoredValue:e=>V(e)},{key:`mastodon`,staffTitle:`Mastodon`,publicationTitle:`Mastodon`,placeholder:`https://mastodon.social/@username`,testId:`mastodon-input`,validate:ve,toDisplayValue:e=>X(e,ye),toStoredValue:e=>e?be(e):null},{key:`tiktok`,staffTitle:`TikTok`,publicationTitle:`TikTok`,placeholder:`https://www.tiktok.com/@username`,testId:`tiktok-input`,validate:he,toDisplayValue:e=>X(e,ge),toStoredValue:e=>_e(e)},{key:`youtube`,staffTitle:`YouTube`,publicationTitle:`YouTube`,placeholder:`https://www.youtube.com/@channel`,testId:`youtube-input`,validate:fe,toDisplayValue:e=>X(e,pe),toStoredValue:e=>me(e)},{key:`instagram`,staffTitle:`Instagram`,publicationTitle:`Instagram`,placeholder:`https://www.instagram.com/username`,testId:`instagram-input`,validate:se,toDisplayValue:e=>X(e,ce),toStoredValue:e=>L(e)}],Q=Object.fromEntries(Z.map(e=>[e.key,e])),Se=(e,t)=>{let n=Q[e],r=n.validate(t),i=r?n.toStoredValue(r):null;return{displayValue:n.toDisplayValue(i),storedValue:i}},Ce=(e,t)=>{try{return Q[e].validate(t||``),``}catch(e){return e instanceof Error?e.message:``}};function $(e,t){return e.filter(e=>e.roles.find(e=>e.name===t))}function we(e,t){return e.filter(e=>e.roles.find(e=>t.includes(e.name)))}function Te(e){return $(e,`Owner`)[0]}var Ee=()=>{let{currentUser:e}=p(),{data:{users:t,meta:n,isEnd:r}={users:[]},isLoading:i,fetchNextPage:a}=l(),{data:{invites:o,meta:s,isEnd:c}={invites:[]},isLoading:f,fetchNextPage:h}=u(),{data:{roles:g}={},isLoading:_}=d(),v=(0,m.useMemo)(()=>Te(t),[t]),y=(0,m.useMemo)(()=>$(t,`Administrator`),[t]),b=(0,m.useMemo)(()=>we(t,[`Editor`,`Super Editor`]),[t]),x=(0,m.useMemo)(()=>$(t,`Author`),[t]),S=(0,m.useMemo)(()=>$(t,`Contributor`),[t]),C=(0,m.useMemo)(()=>o.map(e=>{let t=g?.find(t=>e.role_id===t.id);return{...e,role:t?.name}}),[o,g]);return{totalUsers:n?.pagination.total||0,totalInvites:s?.pagination.total||0,users:t,ownerUser:v,adminUsers:y,editorUsers:b,authorUsers:x,contributorUsers:S,currentUser:e,invites:C,isLoading:i||f||_,hasNextPage:r===!1,invitesHasNextPage:c===!1,fetchNextPage:a,fetchNextInvitePage:h}};export{Se as a,C as c,v as d,b as f,T as h,Ce as i,x as l,E as m,Z as n,_ as o,w as p,xe as r,S as s,Ee as t,y as u};
@@ -1 +0,0 @@
1
- import{o as e}from"./config-DOMQDZGZ.js";import{n as t}from"./global-data-context-gAMDH9u1.js";function n(){let{config:n}=t();return e(n)}export{n 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{b as r,g as i,m as a,n as o,p as s,r as c}from"./hooks-CuEZV2-q.js";import{n as l}from"./dist-Ndy-PuGN.js";import{t as u}from"./use-form-vRjI0Kwk.js";import{h as d,u as f}from"./chunk-KS7C4IRE-DCsL4i4D.js";import{a as p}from"./router-provider-B0gZyiGJ.js";import{m,w as h}from"./dist-B3keLvjj.js";import{t as g}from"./text-BQDSDsKs.js";import{D as _,Mn as v,bt as y,g as b,t as x}from"./button-eNMKQWXr.js";import{i as S,n as C,r as ee,t as w}from"./tabs-D2yWLMp_.js";import{t as T}from"./switch-CI4gLWqb.js";import{t as te}from"./dropzone-D7nFdAe5.js";import{i as E,n as D,o as O,s as k,t as A}from"./select-cb0t_TAJ.js";import{o as ne,t as re}from"./use-settings-navigation-CZjGrhsp.js";import{i as j,n as M,o as N,r as P,t as F}from"./field-Dihp5p18.js";import{t as I}from"./textarea-DJ1Q5V39.js";import{_ as L,c as ie,d as R,g as ae,h as z,m as oe,o as B,p as se,s as ce,t as V,u as le}from"./users-Cg-OeGzC.js";import{n as ue,t as de}from"./use-limiter-D2WRRx0H.js";import{$n as H,$r as fe,Cr as pe,Tr as U,jr as me,t as he,ut as ge,xr as _e}from"./index-6MkPdCtr.js";import{a as ve,c as ye,i as be,n as xe,o as Se,r as Ce,s as we,t as Te}from"./images-scfkWZiK.js";import{a as W,c as G,i as Ee,n as K,o as q,r as De,t as Oe}from"./use-staff-users-Csipb-O0.js";import{t as J}from"./validator-Cr0sMKuW.js";import{n as ke}from"./confirmation-context-CBM8G0Vj.js";import{n as Y}from"./global-data-context-gAMDH9u1.js";import{t as Ae}from"./use-upgrade-route-DhRSo7at.js";import{t as X}from"./api-keys-Ck-Yteiv.js";import{t as je}from"./use-pintura-editor-BfN1UwzH.js";var Z=n(),Me=({user:e,setUserData:t})=>{let{config:n,settings:r}=Y(),i=fe(r||[],n||{});return(0,Z.jsxs)(G,{children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`span`,{className:`text-sm font-medium tracking-wide text-gray-700 uppercase`,children:`Engagement`}),(0,Z.jsxs)(`div`,{className:`mt-3 flex flex-col gap-4`,children:[(0,Z.jsxs)(F,{orientation:`horizontal`,children:[(0,Z.jsxs)(M,{children:[(0,Z.jsx)(N,{htmlFor:`comment-notifications`,children:`Comments`}),(0,Z.jsx)(P,{children:`Every time a member comments on one of your posts`})]}),(0,Z.jsx)(T,{checked:!!e.comment_notifications,id:`comment-notifications`,onCheckedChange:n=>t({...e,comment_notifications:n})})]}),B(e)&&(0,Z.jsxs)(F,{orientation:`horizontal`,children:[(0,Z.jsxs)(M,{children:[(0,Z.jsx)(N,{htmlFor:`recommendation-notifications`,children:`Recommendations`}),(0,Z.jsx)(P,{children:`Every time another publisher recommends you to their audience`})]}),(0,Z.jsx)(T,{checked:!!e.recommendation_notifications,id:`recommendation-notifications`,onCheckedChange:n=>t({...e,recommendation_notifications:n})})]})]})]}),B(e)&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`span`,{className:`text-sm font-medium tracking-wide text-gray-700 uppercase`,children:`Members`}),(0,Z.jsxs)(`div`,{className:`mt-3 flex flex-col gap-4`,children:[(0,Z.jsxs)(F,{orientation:`horizontal`,children:[(0,Z.jsxs)(M,{children:[(0,Z.jsx)(N,{htmlFor:`free-member-signup-notifications`,children:`New signups`}),(0,Z.jsx)(P,{children:`Every time a new free member signs up`})]}),(0,Z.jsx)(T,{checked:!!e.free_member_signup_notification,id:`free-member-signup-notifications`,onCheckedChange:n=>t({...e,free_member_signup_notification:n})})]}),i&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(F,{orientation:`horizontal`,children:[(0,Z.jsxs)(M,{children:[(0,Z.jsx)(N,{htmlFor:`paid-subscription-started-notifications`,children:`New paid members`}),(0,Z.jsx)(P,{children:`Every time a member starts a new paid subscription`})]}),(0,Z.jsx)(T,{checked:!!e.paid_subscription_started_notification,id:`paid-subscription-started-notifications`,onCheckedChange:n=>t({...e,paid_subscription_started_notification:n})})]}),(0,Z.jsxs)(F,{orientation:`horizontal`,children:[(0,Z.jsxs)(M,{children:[(0,Z.jsx)(N,{htmlFor:`paid-subscription-canceled-notifications`,children:`Paid member cancellations`}),(0,Z.jsx)(P,{children:`Every time a member cancels their paid subscription`})]}),(0,Z.jsx)(T,{checked:!!e.paid_subscription_canceled_notification,id:`paid-subscription-canceled-notifications`,onCheckedChange:n=>t({...e,paid_subscription_canceled_notification:n})})]})]})]})]}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`span`,{className:`text-sm font-medium tracking-wide text-gray-700 uppercase`,children:`Revenue`}),(0,Z.jsxs)(`div`,{className:`mt-3 flex flex-col gap-4`,children:[(0,Z.jsxs)(F,{orientation:`horizontal`,children:[(0,Z.jsxs)(M,{children:[(0,Z.jsx)(N,{htmlFor:`milestone-notifications`,children:`Milestones`}),(0,Z.jsx)(P,{children:i?`Occasional summaries of your audience & revenue growth`:`Occasional summaries of your audience growth`})]}),(0,Z.jsx)(T,{checked:!!e.milestone_notifications,id:`milestone-notifications`,onCheckedChange:n=>t({...e,milestone_notifications:n})})]}),i&&(0,Z.jsxs)(F,{orientation:`horizontal`,children:[(0,Z.jsxs)(M,{children:[(0,Z.jsx)(N,{htmlFor:`donation-notifications`,children:`Tips & donations`}),(0,Z.jsx)(P,{children:`Every time you receive a one-time payment`})]}),(0,Z.jsx)(T,{checked:!!e.donation_notifications,id:`donation-notifications`,onCheckedChange:n=>t({...e,donation_notifications:n})})]}),i&&(0,Z.jsxs)(F,{orientation:`horizontal`,children:[(0,Z.jsxs)(M,{children:[(0,Z.jsx)(N,{htmlFor:`gift-subscription-notifications`,children:`Gift subscriptions`}),(0,Z.jsx)(P,{children:`Every time someone purchases or redeems a gift subscription`})]}),(0,Z.jsx)(T,{checked:!!e.gift_subscription_notifications,id:`gift-subscription-notifications`,onCheckedChange:n=>t({...e,gift_subscription_notifications:n})})]})]})]})]})]})},Ne=({user:e,setUserData:t})=>(0,Z.jsx)(q,{variant:`plain`,children:(0,Z.jsx)(Me,{setUserData:t,user:e})}),Q=e(t(),1),Pe=[`1234567890`,`qwertyuiop`,`qwertzuiop`,`asdfghjkl;`,`abcdefghij`,`0987654321`,`1q2w3e4r5t`,`12345asdfg`],Fe=[`ghost`,`password`,`passw0rd`],Ie=e=>{let t={},n=!0,r=e.length/2;for(let n=0;n<e.length;n+=1)t[e[n]]?t[e[n]]+=1:t[e[n]]=1;for(let e in t)if(t[e]>=r)return n=!1,n;return n},Le=({user:e})=>{let{currentUser:t,config:n,siteData:i}=Y(),[a,o]=(0,Q.useState)(!1),[c,u]=(0,Q.useState)(``),[d,f]=(0,Q.useState)(``),[p,m]=(0,Q.useState)(``),[h,g]=(0,Q.useState)(``),[_,v]=(0,Q.useState)({}),y=(0,Q.useRef)(null),b=(0,Q.useRef)(null),S=(0,Q.useRef)(null),{mutateAsync:C}=L(),ee=s(),w=e.id===t.id,T=({password:t,confirmPassword:r})=>{if(w&&!c)return{oldPassword:`Your current password is required to set a new one`};if(t!==r)return{newPassword:`Your new passwords do not match`,confirmNewPassword:`Your new passwords do not match`};let a=n.blogUrl||window.location.host,o=i.title;a=a.replace(/^http(s?):\/\//,``);let s=a.match(/\/$/)?a:`${a}/`;if(o&&=o.trim().toLowerCase(),t.length<10)return{newPassword:`Password must be at least 10 characters long.`};t=t.toString();for(let e of Pe)if(e===t)return{newPassword:`Sorry, you cannot use an insecure password.`};if(t.toLowerCase()===e.email.toLowerCase())return{newPassword:`Sorry, you cannot use an insecure password.`};for(let e of Fe)if(t.toLowerCase().indexOf(e)>=0)return{newPassword:`Sorry, you cannot use an insecure password.`};return t.toLowerCase()===o||t.toLowerCase()===a||t.toLowerCase()===s||!Ie(t)?{newPassword:`Sorry, you cannot use an insecure password.`}:{}};(0,Q.useEffect)(()=>{h===`saved`&&setTimeout(()=>{g(``),o(!1)},2500)},[h]),(0,Q.useEffect)(()=>{a&&setTimeout(()=>{w?S.current?.focus():y.current?.focus()},100)},[a,w]);let te=()=>{o(!0)},E=async()=>{g(`saving`);let t=T({password:d,confirmPassword:p});if(v(t),Object.keys(t).length>0){g(``);return}try{await C({newPassword:d,confirmNewPassword:p,oldPassword:c,userId:e?.id}),g(`saved`)}catch(e){g(``),l.error(e instanceof r?e.message:`Couldn't update password. Please try again.`),ee(e,{withToast:!1})}},D=`Save password`;h===`saving`?D=`Saving...`:h===`saved`&&(D=`Saved`);let O=(0,Z.jsxs)(Z.Fragment,{children:[w&&(0,Z.jsxs)(F,{"data-invalid":!!_.oldPassword||void 0,children:[(0,Z.jsx)(N,{htmlFor:`old-password`,children:`Old password`}),(0,Z.jsx)(H,{ref:S,"aria-invalid":!!_.oldPassword||void 0,"data-testid":`old-password`,id:`old-password`,type:`password`,value:c,onChange:e=>u(e.target.value)}),_.oldPassword&&(0,Z.jsx)(j,{children:_.oldPassword})]}),(0,Z.jsxs)(F,{"data-invalid":!!_.newPassword||void 0,children:[(0,Z.jsx)(N,{htmlFor:`new-password`,children:`New password`}),(0,Z.jsx)(H,{ref:y,"aria-invalid":!!_.newPassword||void 0,"data-testid":`new-password`,id:`new-password`,type:`password`,value:d,onChange:e=>f(e.target.value)}),_.newPassword&&(0,Z.jsx)(j,{children:_.newPassword})]}),(0,Z.jsxs)(F,{"data-invalid":!!_.confirmNewPassword||void 0,children:[(0,Z.jsx)(N,{htmlFor:`confirm-password`,children:`Confirm new password`}),(0,Z.jsx)(H,{ref:b,"aria-invalid":!!_.confirmNewPassword||void 0,"data-testid":`confirm-password`,id:`confirm-password`,type:`password`,value:p,onChange:e=>m(e.target.value)}),_.confirmNewPassword&&(0,Z.jsx)(j,{children:_.confirmNewPassword})]}),(0,Z.jsxs)(`div`,{className:`mt-1 flex items-center justify-end gap-3`,children:[(0,Z.jsx)(x,{type:`button`,variant:`outline`,onClick:()=>{o(!1),u(``),f(``),m(``),v({})},children:`Cancel`}),(0,Z.jsx)(x,{"data-testid":`save-password-button`,type:`button`,onClick:()=>void E(),children:D})]})]});return(0,Z.jsx)(Z.Fragment,{children:a?O:(0,Z.jsxs)(`div`,{className:`relative flex flex-col`,children:[(0,Z.jsxs)(F,{className:`grow`,"data-disabled":!0,children:[(0,Z.jsx)(N,{htmlFor:`current-password`,children:`Password`}),(0,Z.jsx)(H,{id:`current-password`,type:`password`,value:`••••••••••••`,disabled:!0})]}),(0,Z.jsx)(x,{className:`absolute top-0 right-0 h-auto p-0 hover:bg-transparent`,"data-testid":`change-password-button`,size:`sm`,type:`button`,variant:`ghost`,onClick:te,children:`Change`})]})})},Re=({user:e,setUserData:t})=>{let{data:{roles:n}={}}=ue(),r=he(`superEditors`),i=[{hint:`Can write and edit their own posts, but cannot publish them.`,label:`Contributor`,value:`contributor`},{hint:`Can create, edit and publish their own posts, but can’t modify others.`,label:`Author`,value:`author`},{hint:`Can edit and publish any posts, and manage Authors and Contributors.`,label:`Editor`,value:`editor`},{hint:`Trusted user who has full access to all content, settings, and user management.`,label:`Administrator`,value:`administrator`}];if(r&&(i=i.map(e=>e.value===`editor`?{...e,label:`Editor (beta mode)`,value:`super editor`,hint:`Can invite and manage other Authors and Contributors, as well as edit and publish any posts on the site. Can manage members and moderate comments.`}:e)),R(e)){let e={label:`Owner`,value:`owner`};return(0,Z.jsxs)(F,{children:[(0,Z.jsx)(N,{children:`Role`}),(0,Z.jsxs)(A,{value:e.value,disabled:!0,children:[(0,Z.jsx)(O,{"aria-label":`Role`,children:(0,Z.jsx)(k,{})}),(0,Z.jsx)(D,{children:(0,Z.jsx)(E,{value:e.value,children:e.label})})]}),(0,Z.jsxs)(P,{children:[`This user is the owner of the site.`,` `,(0,Z.jsx)(`a`,{href:`https://ghost.org/help/transfer-publication-ownership/`,rel:`noopener noreferrer`,target:`_blank`,children:`Transfer ownership`}),` `,`first to change their role.`]})]})}let a=e.roles[0].name.toLowerCase(),o=i.find(e=>e.value.toLowerCase()===a)?.label;return(0,Z.jsxs)(F,{children:[(0,Z.jsx)(N,{children:`Role`}),(0,Z.jsxs)(A,{value:a,onValueChange:r=>{let i=n?.find(e=>e.name.toLowerCase()===r.toLowerCase());i&&t?.({...e,roles:[i]})},children:[(0,Z.jsx)(O,{"aria-label":`Role`,"data-testid":`role-select`,children:(0,Z.jsx)(k,{children:o})}),(0,Z.jsx)(D,{children:i.map(e=>(0,Z.jsx)(E,{value:e.value,children:(0,Z.jsxs)(`span`,{className:`flex flex-col`,children:[(0,Z.jsx)(`span`,{children:e.label}),(0,Z.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:e.hint})]})},e.value))})]})]})},$=c({dataType:`StaffTokenResponseType`,path:`/users/me/token/`}),ze=o({path:()=>`/users/me/token/`,method:`PUT`}),Be=()=>{let{refetch:e}=$({enabled:!1}),t=s(),{confirm:n}=ke(),[r,i]=(0,Q.useState)(``),{mutateAsync:a}=ze();return(0,Q.useEffect)(()=>{(async()=>{let t=await e();t?.data?.apiKey&&i(`${t.data.apiKey.id}:${t.data.apiKey.secret}`)})()},[e]),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(g,{as:`h6`,className:`mb-2 text-base`,weight:`semibold`,children:`Staff access token`}),(0,Z.jsx)(X,{hasLabel:!1,keys:[{id:`staff-access-token`,text:r||``,onRegenerate:()=>{n({title:`Regenerate your Staff Access Token`,prompt:`You can regenerate your Staff Access Token any time, but any scripts or applications using it will need to be updated.`,okLabel:`Regenerate your Staff Access Token`,okVariant:`destructive`,onOk:async e=>{try{let t=await a([]);i(`${t.apiKey.id}:${t.apiKey.secret}`),e?.remove()}catch(e){t(e)}}})}}]})]})},Ve=({errors:e,clearError:t,user:n,setUserData:r})=>{let{currentUser:i,siteData:a}=Y(),o=ge(a);return(0,Z.jsxs)(G,{children:[(0,Z.jsxs)(F,{"data-invalid":!!e?.email||void 0,children:[(0,Z.jsx)(N,{htmlFor:`staff-email`,children:`Email`}),(0,Z.jsx)(H,{"aria-invalid":!!e?.email||void 0,id:`staff-email`,maxLength:191,value:n.email,onChange:e=>r({...n,email:e.target.value}),onKeyDown:()=>t(`email`)}),e?.email?(0,Z.jsx)(j,{children:e.email}):(0,Z.jsx)(P,{children:`Used for notifications`})]}),(0,Z.jsx)(Le,{user:n}),B(i)&&(0,Z.jsx)(Re,{setUserData:r,user:n}),(0,Z.jsxs)(F,{"data-invalid":!!e?.name||void 0,children:[(0,Z.jsx)(N,{htmlFor:`staff-name`,children:`Full name`}),(0,Z.jsx)(H,{"aria-invalid":!!e?.name||void 0,id:`staff-name`,maxLength:191,value:n.name,onChange:e=>r({...n,name:e.target.value}),onKeyDown:()=>t(`name`)}),e?.name?(0,Z.jsx)(j,{children:e.name}):(0,Z.jsx)(P,{children:`Use your real name so people can recognize you`})]}),(0,Z.jsxs)(F,{children:[(0,Z.jsx)(N,{htmlFor:`staff-slug`,children:`Slug`}),(0,Z.jsx)(H,{id:`staff-slug`,maxLength:191,value:n.slug,onChange:e=>r({...n,slug:e.target.value})}),(0,Z.jsxs)(P,{children:[o,`author/`,n.slug]})]}),(0,Z.jsxs)(F,{"data-invalid":!!e?.location||void 0,children:[(0,Z.jsx)(N,{htmlFor:`staff-location`,children:`Location`}),(0,Z.jsx)(H,{"aria-invalid":!!e?.location||void 0,id:`staff-location`,maxLength:65535,value:n.location||``,onChange:e=>r({...n,location:e.target.value}),onKeyDown:()=>t(`location`)}),e?.location?(0,Z.jsx)(j,{children:e.location}):(0,Z.jsx)(P,{children:`Where in the world do you live?`})]}),(0,Z.jsxs)(F,{"data-invalid":!!e?.bio||void 0,children:[(0,Z.jsx)(N,{htmlFor:`staff-bio`,children:`Bio`}),(0,Z.jsx)(I,{"aria-invalid":!!e?.bio||void 0,id:`staff-bio`,maxLength:65535,value:n.bio||``,onChange:e=>{r({...n,bio:e.target.value})},onKeyDown:()=>t(`bio`)}),e?.bio?(0,Z.jsx)(j,{children:e.bio}):(0,Z.jsxs)(P,{children:[`Recommended: `,m(250),` characters. You‘ve used`,` `,(0,Z.jsx)(`span`,{className:`font-bold`,children:m(n.bio?.length||0)})]})]}),n.id===i.id&&(0,Z.jsx)(Be,{})]})},He=e=>(0,Z.jsx)(q,{variant:`plain`,children:(0,Z.jsx)(Ve,{...e})}),Ue=({errors:e,clearError:t,validateField:n,user:r,setUserData:i})=>{let[a,o]=(0,Q.useState)(()=>Object.fromEntries(K.map(e=>{let t=r[e.key];return[e.key,e.toDisplayValue(t)]})));return(0,Z.jsxs)(G,{children:[(0,Z.jsxs)(F,{"data-invalid":!!e?.website||void 0,children:[(0,Z.jsx)(N,{htmlFor:`staff-website`,children:`Website`}),(0,Z.jsx)(H,{"aria-invalid":!!e?.website||void 0,"data-testid":`website-input`,id:`staff-website`,maxLength:2e3,placeholder:`https://example.com`,value:r.website||``,onChange:e=>{i({...r,website:e.target.value})},onKeyDown:()=>t(`website`)}),e?.website&&(0,Z.jsx)(j,{children:e.website})]}),K.map(s=>(0,Z.jsxs)(F,{"data-invalid":!!e?.[s.key]||void 0,children:[(0,Z.jsx)(N,{htmlFor:`staff-${s.key}`,children:s.staffTitle}),(0,Z.jsx)(H,{"aria-invalid":!!e?.[s.key]||void 0,"data-testid":s.testId,id:`staff-${s.key}`,maxLength:2e3,placeholder:s.placeholder,value:a[s.key],onBlur:e=>{if(n(s.key,e.target.value)){let{displayValue:t,storedValue:n}=W(s.key,e.target.value);o(e=>({...e,[s.key]:t})),i({...r,[s.key]:n})}},onChange:e=>{o(t=>({...t,[s.key]:e.target.value}))},onKeyDown:()=>t(s.key)}),e?.[s.key]&&(0,Z.jsx)(j,{children:e[s.key]})]},s.key))]})},We=e=>(0,Z.jsx)(q,{variant:`plain`,children:(0,Z.jsx)(Ue,{...e})}),Ge=e(J(),1),Ke={name:({name:e})=>{let t=``;return e||(t=`Name is required`),e&&e.length>191&&(t=`Name is too long`),t},email:({email:e})=>Ge.default.isEmail(e||``)?``:`Enter a valid email address`,url:({url:e})=>!e||Ge.default.isURL(e,{require_tld:!1})?``:`Enter a valid URL`,bio:({bio:e})=>!e||e.length<=250?``:`Bio is too long`,location:({location:e})=>!e||e.length<=150?``:`Location is too long`,website:({website:e})=>!e||Ge.default.isURL(e)&&e.length<=2e3?``:`Enter a valid URL`,...Object.fromEntries(K.map(e=>[e.key,t=>Ee(e.key,t[e.key])]))},qe=({user:e,onDeletingUserChange:t})=>{let{updateRoute:n}=re(),r=p(),a=Ae(),o=f(),c=e=>{let t=e.split(`/`).pop()||``;return t===`social-links`||t===`email-notifications`?t:`profile`},{ownerUser:d}=Oe(),{currentUser:m}=Y(),T=s(),{confirm:E,showLimit:D}=ke(),{formState:O,setFormState:k,saveState:A,handleSave:j,updateForm:M,errors:N,setErrors:P,clearError:F,okProps:I}=u({initialState:e,savingDelay:500,savedDelay:500,onValidate:t=>Object.entries(Ke).reduce((n,[r,i])=>{if(De.includes(r)&&t[r]===e[r])return n;let a=i(t);return a&&(n[r]=a),n},{}),onSave:async t=>{let r=(await H?.(t))?.users?.[0];if(r&&(k(()=>r),r.slug!==e.slug)){let e=c(o.pathname),t=e===`profile`?``:`/${e}`;n({route:`staff/${r.slug}${t}`,replace:!0})}},onSaveError:T}),L=e=>M(()=>e),z=(e,t)=>{let n=Ke[e]?.({[e]:t});return n?(P({...N,[e]:n}),!1):(F(e),!0)},{mutateAsync:ue}=xe(),{mutateAsync:H}=oe(),{mutateAsync:fe}=se(),{mutateAsync:he}=ae(),ge=de(),W=je(),G=(0,Q.useCallback)(()=>{V(m)?n(`staff`):r(`/`)},[m,r,n]),Ee=async e=>{if(e.status===`inactive`&&e.roles[0].name!==`Contributor`)try{await ge?.errorIfWouldGoOverLimit(`staff`)}catch(e){if(e instanceof i){D({formSheet:!0,prompt:e.message||`Your current plan doesn't support more users.`,onOk:()=>n({route:a,isExternal:!0})});return}else throw e}let t=`This user will no longer be able to log in but their posts will be kept.`;e.status===`inactive`&&(t=`This user will be able to log in again and will have the same permissions they had previously.`),E({title:`Are you sure you want to suspend this user?`,prompt:(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`strong`,{children:`WARNING:`}),` `,t]}),okLabel:e.status===`inactive`?`Un-suspend`:`Suspend`,okRunningLabel:e.status===`inactive`?`Un-suspending...`:`Suspending...`,okVariant:`destructive`,onOk:async t=>{let n={...e,status:e.status===`inactive`?`active`:`inactive`};try{await H(n),k(()=>n),t?.remove(),l.success(e.status===`inactive`?`User un-suspended`:`User suspended`)}catch(e){T(e)}}})},K=(n,{owner:r})=>{E({title:`Are you sure you want to delete this user?`,prompt:(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`p`,{className:`mb-3`,children:[(0,Z.jsx)(`span`,{className:`font-bold`,children:n.name||n.email}),` will be permanently deleted and all their posts will be automatically assigned to`,` `,(0,Z.jsx)(`span`,{className:`font-bold`,children:r.name}),`.`]}),(0,Z.jsxs)(`p`,{children:[`To make these easy to find in the future, each post will be given an internal tag of`,` `,(0,Z.jsxs)(`span`,{className:`font-bold`,children:[`#`,e.slug]})]})]}),okLabel:`Delete user`,okVariant:`destructive`,onOk:async e=>{t(!0);try{await fe(n?.id),e?.remove(),G(),setTimeout(()=>l.success(`User deleted`),100)}catch(e){t(!1),T(e)}}})},q=()=>{E({title:`Transfer Ownership`,prompt:`Are you sure you want to transfer the ownership of this blog? You will not be able to undo this action.`,okLabel:`Yep — I'm sure`,okVariant:`destructive`,onOk:async t=>{try{await he(e.id),t?.remove(),l.success(`Ownership transferred`)}catch(e){T(e)}}})},J=async(e,t)=>{try{let n=Te(await ue({file:t}));switch(e){case`cover_image`:M(e=>({...e,cover_image:n}));break;case`profile_image`:M(e=>({...e,profile_image:n}));break}}catch(e){let t=e;t.response.status===415&&(t.message=`Unsupported file type`),T(t)}},X=e=>{switch(e){case`cover_image`:M(e=>({...e,cover_image:``}));break;case`profile_image`:M(e=>({...e,profile_image:``}));break}},Me=B(m)||le(m)&&ie(e),Pe=R(m)&&ce(O)&&O.status!==`inactive`,Fe=O.id!==m.id&&(B(m)&&!R(e)||le(m)&&ie(e)),Ie=O.status===`inactive`?`Un-suspend user`:`Suspend user`,Le=`h-8 bg-surface-inverse px-3 text-surface-inverse-foreground opacity-80 hover:bg-surface-inverse/90 hover:text-surface-inverse-foreground hover:opacity-100`,Re=O.status===`inactive`?` (Suspended)`:``,$=!V(m),ze=`mx-auto w-full max-w-[536px]`,[Be,Ve]=(0,Q.useState)(c(o.pathname));return(0,Z.jsx)(ne,{animate:!$,backDrop:!$,buttonsDisabled:I.disabled,cancelLabel:`Close`,dirty:A===`unsaved`,footerClassName:$?`mx-auto w-full max-w-[calc(536px+5rem)]`:void 0,hideXOnMobile:!0,okLabel:I.label||`Save`,okVariant:I.variant,size:$?`bleed`:`md`,stickyFooter:!0,testId:`user-detail-modal`,width:$?`full`:600,onClose:G,onOk:async()=>{await j({fakeWhenUnchanged:!0})},children:(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`div`,{className:`relative ${$?`-mx-10 -mt-10`:`-mx-8 -mt-8 rounded-t`}`,children:(0,Z.jsx)(`div`,{className:h(`flex flex-wrap items-end justify-between gap-8 p-8`,O.cover_image&&`bg-cover bg-center`,$&&O.cover_image&&`min-h-[30vmin]`),style:{backgroundImage:O.cover_image?`url(${O.cover_image})`:`none`},children:(0,Z.jsxs)(`div`,{className:h(`flex w-full flex-col gap-2`,$&&ze),children:[(0,Z.jsxs)(`div`,{className:`flex flex-nowrap items-start justify-between gap-3`,children:[(0,Z.jsx)(`div`,{children:(0,Z.jsx)(Ce,{className:`-ml-1 size-20 overflow-visible rounded-full`,children:O.profile_image?(0,Z.jsxs)(ye,{className:`rounded-full`,children:[(0,Z.jsx)(we,{"data-testid":`profile-image-preview`,id:`avatar`,src:O.profile_image}),(0,Z.jsxs)(ve,{className:`top-1 right-1`,children:[W.isEnabled&&(0,Z.jsx)(be,{"aria-label":`Edit profile image`,className:`rounded-full`,onClick:()=>W.openEditor({image:O.profile_image||``,handleSave:async e=>J(`profile_image`,e)}),children:(0,Z.jsx)(y,{})}),(0,Z.jsx)(be,{"aria-label":`Remove profile image`,className:`rounded-full`,onClick:()=>X(`profile_image`),children:(0,Z.jsx)(_,{})})]})]}):(0,Z.jsx)(Se,{className:`rounded-full bg-surface-inverse text-surface-inverse-foreground opacity-80 hover:opacity-100`,inputId:`avatar`,inputTestId:`profile-image-upload`,onDropAccepted:e=>void J(`profile_image`,e[0]),children:(0,Z.jsx)(b,{className:`size-8 text-surface-inverse-foreground`})})})}),(0,Z.jsxs)(`div`,{className:`flex flex-nowrap items-start gap-3`,children:[O.cover_image?(0,Z.jsxs)(`div`,{className:`flex flex-nowrap items-end justify-end gap-4`,children:[(0,Z.jsx)(`img`,{alt:``,className:`hidden`,"data-testid":`cover-image-preview`,src:O.cover_image}),W.isEnabled&&(0,Z.jsx)(x,{className:Le,type:`button`,onClick:()=>W.openEditor({image:O.cover_image||``,handleSave:async e=>J(`cover_image`,e)}),children:`Edit cover image`}),(0,Z.jsx)(x,{className:Le,type:`button`,onClick:()=>X(`cover_image`),children:`Delete cover image`})]}):(0,Z.jsx)(te,{className:`h-8`,inputId:`cover-image`,inputTestId:`cover-image-upload`,variant:`button`,onDropAccepted:e=>void J(`cover_image`,e[0]),children:`Upload cover image`}),Me&&(0,Z.jsx)(`div`,{className:`z-10`,children:(0,Z.jsxs)(_e,{children:[(0,Z.jsx)(me,{asChild:!0,children:(0,Z.jsxs)(`button`,{className:h(`flex h-8 cursor-pointer items-center justify-center rounded px-3`,O.cover_image?`bg-[rgba(0,0,0,0.75)] opacity-80 hover:opacity-100`:`border border-gray-300 bg-transparent text-black dark:border-gray-800 dark:text-white`),type:`button`,children:[(0,Z.jsx)(`span`,{className:`sr-only`,children:`Actions`}),(0,Z.jsx)(v,{className:h(`size-5`,O.cover_image&&`text-white`)})]})}),(0,Z.jsxs)(pe,{align:`end`,className:`z-[9999]`,children:[Pe&&(0,Z.jsx)(U,{onSelect:q,children:`Make owner`}),(0,Z.jsx)(U,{onSelect:()=>{n(`history/view/${O.id}`)},children:`View user activity`}),Fe&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(U,{onSelect:()=>{Ee(O)},children:Ie}),(0,Z.jsx)(U,{className:`text-destructive focus:text-destructive`,onSelect:()=>{K(e,{owner:d})},children:`Delete user`})]})]})]})})]})]}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsxs)(g,{as:`h3`,className:h(`break-words md:text-2xl md:break-normal`,O.cover_image?`text-white`:`text-foreground`),leading:`heading`,size:`xl`,weight:`bold`,children:[e.name,Re]}),(0,Z.jsx)(`span`,{className:h(`text-md font-medium capitalize`,O.cover_image?`text-white`:`text-black dark:text-white`),children:e.roles[0].name.toLowerCase()})]})]})})}),(0,Z.jsx)(`div`,{className:h(`mt-6 flex flex-col`,$&&ze),children:(0,Z.jsxs)(w,{value:Be,variant:`underline`,onValueChange:t=>{let r=t===`profile`?``:`/${t}`;n(`staff/${e.slug}${r}`),Ve(t)},children:[(0,Z.jsxs)(ee,{children:[(0,Z.jsx)(S,{title:`Profile`,value:`profile`,children:`Profile`}),(0,Z.jsx)(S,{title:`Social Links`,value:`social-links`,children:`Social Links`}),(0,Z.jsx)(S,{title:`Email Notifications`,value:`email-notifications`,children:`Email Notifications`})]}),(0,Z.jsx)(C,{className:`pt-4`,value:`profile`,children:(0,Z.jsx)(He,{clearError:F,errors:N,setUserData:L,user:O,validateField:z})}),(0,Z.jsx)(C,{className:`pt-4`,value:`social-links`,children:(0,Z.jsx)(We,{clearError:F,errors:N,setUserData:L,user:O,validateField:z})}),(0,Z.jsx)(C,{className:`pt-4`,value:`email-notifications`,children:(0,Z.jsx)(Ne,{setUserData:L,user:O})})]})})]})})},Je=()=>{let{slug:e}=d(),{currentUser:t}=Y(),{updateRoute:n}=re(),r=p(),i=s(),[o,c]=(0,Q.useState)(!1),u=t.slug===e,{data:f,error:m}=z(e||``,{enabled:!u&&!!e,defaultErrorHandler:!1}),h=u?t:f?.users?.[0],g=m instanceof a&&m.response?.status===404;(0,Q.useEffect)(()=>{m&&!g&&i(m)},[m,g,i]);let _=!u&&!!e&&!h&&(g||f!==void 0),v=(0,Q.useRef)(void 0);h&&(v.current=h);let y=h||(_?void 0:v.current),b=_?e??null:null,x=(0,Q.useRef)(null);return(0,Q.useEffect)(()=>{!b||o||x.current===b||(x.current=b,l.error(`User not found`),V(t)?n({route:`staff`,replace:!0}):r(`/`))},[b,o,t,r,n]),y?(0,Z.jsx)(qe,{user:y,onDeletingUserChange:c}):null};export{Je as default};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{t as r}from"./use-tinybird-query-CSnGXzZh.js";import{i}from"./pagemenu-B5KKCpbA.js";import{_ as a,h as o}from"./chunk-KS7C4IRE-DCsL4i4D.js";import{a as s,t as c}from"./router-provider-B0gZyiGJ.js";import{_ as ee,h as l,m as u}from"./dist-B3keLvjj.js";import{a as d}from"./heading-Dh5SFVjL.js";import{C as f}from"./shade-app-CcS3f8MZ-vwURazk8.js";import{L as p,gn as te,t as m}from"./button-eNMKQWXr.js";import{r as h}from"./trend-badge-6ye93YAW.js";import{r as g,t as _}from"./tabs-D2yWLMp_.js";import{a as ne}from"./filters-CRUWecfY.js";import{a as v,i as y,n as b,o as x,r as S,t as C}from"./card--VNbfgo3.js";import{a as w,c as T,i as E,l as D,n as O,o as re,r as k,s as A,t as j,u as M}from"./data-list-CA2jYGPq.js";import{t as ie}from"./empty-indicator-D9QdpuNX.js";import{a as N,i as ae,n as oe,r as se}from"./use-filter-params-BIni9taJ.js";import{An as P,Cr as F,Fn as I,G as ce,Mn as L,Nn as R,Pn as z,Tr as B,Un as V,W as H,Zn as le,ii as ue,jn as U,jr as W,mi as de,q as fe,xr as pe}from"./index-6MkPdCtr.js";import{t as G}from"./date-range-select-uvz_DtPh.js";import{a as K,c as me,i as he,n as q,o as ge,r as _e}from"./chart-helpers-CfBKt0vT.js";import{n as J,r as Y,t as ve}from"./kpi-tabs-BJItvLYm.js";import{t as ye}from"./use-analytics-data-CWCMAESo.js";import{n as be,t as xe}from"./audience-CtbA54Sn.js";import{n as Se,t as Ce}from"./en-B1jX3WMs.js";import{r as we,t as Te}from"./post-analytics-header-BYCsT0GP.js";import{n as Ee}from"./post-analytics-context-D0Mw-Pmv.js";import{n as X,r as De,t as Z}from"./kpi-helpers-Cv8i8hns.js";var Q=e(t(),1),$=n(),Oe=({data:e,range:t})=>{let[n]=a(),[r,i]=(0,Q.useState)(n.get(`tab`)||`visits`),o=X[r],s=me(e||[],t,o.dataKey,`sum`)?.map(e=>{let t=Number(e[o.dataKey]);return{date:String(e.date),value:t,formattedValue:o.formatter(t),label:o.label}}),c=Z(e),ee=_e(t,e||[],{fieldName:o.dataKey});return(0,$.jsx)(C,{children:(0,$.jsx)(b,{children:(0,$.jsxs)(_,{defaultValue:r,variant:`kpis`,children:[(0,$.jsxs)(g,{className:`-mx-6 hidden grid-cols-2 md:visible! md:grid!`,children:[(0,$.jsx)(J,{value:`visits`,onClick:()=>{i(`visits`)},children:(0,$.jsx)(Y,{color:X.visits.color,label:`Unique visitors`,value:c.visits})}),(0,$.jsx)(J,{value:`views`,onClick:()=>{i(`views`)},children:(0,$.jsx)(Y,{color:X.views.color,label:`Total views`,value:c.views})})]}),(0,$.jsxs)(pe,{children:[(0,$.jsx)(W,{className:`md:hidden`,asChild:!0,children:(0,$.jsxs)(ve,{children:[r===`visits`&&(0,$.jsx)(Y,{color:`var(--chart-blue)`,label:`Unique visitors`,value:c.visits}),r===`views`&&(0,$.jsx)(Y,{color:`var(--chart-teal)`,label:`Total views`,value:c.views})]})}),(0,$.jsxs)(F,{align:`end`,className:`w-56`,children:[(0,$.jsx)(B,{onClick:()=>i(`visits`),children:`Unique visitors`}),(0,$.jsx)(B,{onClick:()=>i(`views`),children:`Total views`})]})]}),(0,$.jsx)(`div`,{className:`my-4 [&_.recharts-cartesian-axis-tick-value]:fill-gray-500`,children:(0,$.jsx)(h,{className:`-mb-3 aspect-auto h-[16vw] max-h-[320px] min-h-[180px] w-full`,color:o.color,data:s,id:o.dataKey,range:ee,showHours:!0,syncId:`overview-charts`})})]})})})},ke=e(Se(),1);ke.registerLocale(Ce);var Ae=e=>H[e]||ke.getName(e,`en`,{select:`alias`})||`Unknown`,je=e=>({"UNITED STATES":`US`,"UNITED STATES OF AMERICA":`US`,USA:`US`,"UNITED KINGDOM":`GB`,UK:`GB`,"GREAT BRITAIN":`GB`,NETHERLANDS:`NL`})[e.toUpperCase()]||(e.length>2?e.substring(0,2):e),Me=({tableHeader:e,data:t,onLocationClick:n})=>(0,$.jsxs)(j,{children:[e&&(0,$.jsxs)(w,{children:[(0,$.jsx)(E,{children:`Country`}),(0,$.jsx)(E,{children:`Visitors`})]}),(0,$.jsx)(k,{children:t.map(e=>{let t=Ae(`${e.location}`)||`Unknown`,r=n&&e.location!==`Unknown`,i=e.location?e.location.toLowerCase():`unknown`;return(0,$.jsxs)(M,{className:r?`cursor-pointer`:``,"data-testid":`location-row-${i}`,onClick:r?()=>n(e.location):void 0,children:[(0,$.jsx)(O,{style:{width:`${e.percentage?Math.round(e.percentage*100):0}%`}}),(0,$.jsx)(re,{className:`group-hover/data:max-w-[calc(100%-140px)]`,children:(0,$.jsxs)(`div`,{className:`flex items-center space-x-3 overflow-hidden`,title:t||`Unknown`,children:[(0,$.jsx)(N,{countryCode:`${je(e.location)}`,fallback:(0,$.jsx)(`span`,{className:`flex h-[14px] w-[22px] items-center justify-center rounded-[2px] bg-black text-white`,children:(0,$.jsx)(f.SkullAndBones,{className:`size-3`})})}),(0,$.jsx)(`div`,{className:`truncate font-medium`,children:t})]})}),(0,$.jsxs)(A,{children:[(0,$.jsx)(T,{children:u(Number(e.visits))}),(0,$.jsx)(D,{children:l(e.percentage)})]})]},e.location||`unknown`)})})]}),Ne=({data:e,isLoading:t,onLocationClick:n})=>{let r=e.slice(0,10);return(0,$.jsx)($.Fragment,{children:t?``:(0,$.jsx)($.Fragment,{children:e&&e.length>0&&(0,$.jsxs)(C,{className:`group/datalist`,"data-testid":`locations-card`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between p-6`,children:[(0,$.jsxs)(v,{className:`p-0`,children:[(0,$.jsx)(x,{children:`Locations`}),(0,$.jsx)(S,{children:`Where are the readers of this post`})]}),(0,$.jsx)(d,{className:`mr-2`,children:`Visitors`})]}),(0,$.jsxs)(b,{className:`overflow-hidden`,children:[(0,$.jsx)(V,{}),(0,$.jsx)(Me,{data:r,tableHeader:!1,onLocationClick:n})]}),e.length>10&&(0,$.jsx)(y,{children:(0,$.jsxs)(P,{children:[(0,$.jsx)(I,{asChild:!0,children:(0,$.jsxs)(m,{variant:`outline`,children:[`View all `,(0,$.jsx)(p,{})]})}),(0,$.jsxs)(U,{className:`overflow-y-auto pt-0 sm:max-w-[420px]`,children:[(0,$.jsxs)(R,{className:`sticky top-0 z-40 -mx-6 bg-surface-elevated/60 p-6 backdrop-blur`,children:[(0,$.jsx)(z,{children:`Top locations`}),(0,$.jsx)(L,{children:`Where are the readers of this post`})]}),(0,$.jsx)(`div`,{className:`group/datalist`,children:(0,$.jsx)(Me,{data:e,tableHeader:!0,onLocationClick:n})})]})]})})]})})})},Pe=()=>{let e=s(),{postId:t}=o(),{statsConfig:n,isLoading:a,site:l}=ye(),{range:u,setRange:d,post:f,isPostLoading:p}=Ee(),{data:m}=ue(),h=de(),g=(0,Q.useRef)(null),{filters:_,setFilters:v}=se({supportedFields:oe,trackingSource:`post-analytics`}),y=(0,Q.useMemo)(()=>xe(_.find(e=>e.field===`audience`)?.values),[_]);(0,Q.useEffect)(()=>{!p&&f?.email_only&&e(`/posts/analytics/${t}`)},[p,f?.email_only,e,t]);let x=(0,Q.useMemo)(()=>{if(!f?.published_at)return ce.allTime.value;let e=ge(f.published_at),{startDate:t,endDate:n}=K(u);return n.diff(t,`days`)+1>e?e:u},[f?.published_at,u]),{startDate:S,endDate:w,timezone:T}=K(x),E=(0,Q.useCallback)(()=>{let e=ee(g.current);e&&e.scrollTo({top:0,behavior:`smooth`})},[]),D=(0,Q.useMemo)(()=>{let e={};return _.forEach(t=>{let n=t.field,r=t.values;if(n===`audience`)return;let i=r&&r.length>0&&r[0]!==null&&r[0]!==void 0,a=n===`source`&&r?.[0]===``;if(i&&(r[0]!==``||a)){let t=String(r[0]);e[n]=t}}),e},[_]),O=(0,Q.useCallback)((e,t)=>{v(n=>n.find(t=>t.field===e)?n.map(n=>n.field===e?{...n,values:[t]}:n):[...n,ne(e,`is`,[t])]),E()},[v,E]),re=(0,Q.useCallback)(e=>O(`location`,e),[O]),k=(0,Q.useCallback)(e=>O(`source`,e),[O]),A=(0,Q.useMemo)(()=>{let e={site_uuid:n?.id||``,date_from:q(S),date_to:q(w),timezone:T,member_status:be(y),post_uuid:``,...D};return!p&&f?.uuid?{...e,post_uuid:f.uuid}:e},[p,f,n?.id,S,w,T,y,D]),{data:j,loading:M}=r({endpoint:`api_kpis`,statsConfig:n,params:A}),{data:N,loading:P}=r({endpoint:`api_top_locations`,statsConfig:n,params:A}),{data:F,loading:I}=r({endpoint:`api_top_sources`,statsConfig:n,params:A}),L=(0,Q.useMemo)(()=>N?.reduce((e,t)=>e+Number(t.visits),0)||0,[N]),R=(0,Q.useMemo)(()=>F?F.reduce((e,t)=>e+Number(t.visits||0),0):0,[F]),z=l.url,B=l.icon,V=(0,Q.useMemo)(()=>{let e=N?.map(e=>({location:String(e.location),visits:Number(e.visits),percentage:L>0?Number(e.visits)/L:0,isUnknown:fe.includes(String(e.location))}))||[],t=e.filter(e=>!e.isUnknown),n=e.filter(e=>e.isUnknown),r=n.length>0?[{location:`Unknown`,visits:n.reduce((e,t)=>e+t.visits,0),percentage:n.reduce((e,t)=>e+t.percentage,0)}]:[];return[...t,...r]},[N,L]),H=a||p||M||P||I,U=Z(j),W=_.length>0;return m?.settings&&!h?(0,$.jsx)(c,{to:`/posts/analytics/${t}`,replace:!0}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(Te,{currentTab:`Web`,children:[W&&(0,$.jsx)(i,{children:(0,$.jsx)(G,{range:u,onRangeChange:d})}),(0,$.jsxs)(i,{className:`${W?`mt-0! [grid-area:subactions] lg:mt-[25px]!`:`[grid-area:actions]`}`,children:[(0,$.jsx)(ae,{filters:_,postUuid:f?.uuid,range:u,onChange:v}),!W&&(0,$.jsx)(G,{range:u,onRangeChange:d})]})]}),(0,$.jsx)(we,{ref:g,children:H?(0,$.jsx)(C,{className:`size-full`,variant:`plain`,children:(0,$.jsx)(b,{className:`size-full items-center justify-center`,children:(0,$.jsx)(le,{})})}):j&&j.length!==0&&U.visits!==`0`?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Oe,{data:j,range:x}),(0,$.jsxs)(`div`,{className:`flex flex-col gap-6 lg:grid lg:grid-cols-2`,children:[(0,$.jsx)(Ne,{data:V,isLoading:P,onLocationClick:re}),(0,$.jsx)(De,{data:F,range:x,siteIcon:B,siteUrl:z,totalVisitors:R,onSourceClick:k})]})]}):(0,$.jsx)(`div`,{className:`grow`,children:(0,$.jsx)(ie,{className:`h-full`,description:`Try adjusting filters to see more data.`,title:`No visitors ${he(u)}`,children:(0,$.jsx)(te,{strokeWidth:1.5})})})})]})};export{Pe as default};
@@ -1,39 +0,0 @@
1
- const { AbstractEmailSuppressionList, EmailSuppressionData } = require('./email-suppression-list');
2
-
3
- module.exports = class InMemoryEmailSuppressionList extends AbstractEmailSuppressionList {
4
- store = ['spam@member.test', 'fail@member.test'];
5
-
6
- async removeEmail(email) {
7
- if (
8
- (email === 'fail@member.test' || email === 'spam@member.test') &&
9
- this.store.includes(email)
10
- ) {
11
- this.store = this.store.filter((el) => el !== email);
12
-
13
- setTimeout(() => this.store.push(email), 3000);
14
- return true;
15
- }
16
-
17
- return false;
18
- }
19
-
20
- async getSuppressionData(email) {
21
- if (email === 'spam@member.test' && this.store.includes(email)) {
22
- return new EmailSuppressionData(true, {
23
- timestamp: new Date(),
24
- reason: 'spam',
25
- });
26
- }
27
- if (email === 'fail@member.test' && this.store.includes(email)) {
28
- return new EmailSuppressionData(true, {
29
- timestamp: new Date(),
30
- reason: 'fail',
31
- });
32
- }
33
- return new EmailSuppressionData(false);
34
- }
35
-
36
- async init() {
37
- return;
38
- }
39
- };
@@ -1,120 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.CustomFieldBindingsService = void 0;
7
- const bson_objectid_1 = __importDefault(require("bson-objectid"));
8
- const logging_1 = __importDefault(require("@tryghost/logging"));
9
- const schema_1 = require("./schema");
10
- const FIELDS_TABLE = 'members_custom_fields';
11
- const { CUSTOM_NAMESPACE } = require('@tryghost/custom-field-types/identity');
12
- const BINDINGS_TABLE = 'members_custom_field_bindings';
13
- /**
14
- * Where a source sends what it collected: a `port` is the name that source uses for a
15
- * thing, and the binding resolves it to one of the publisher's fields.
16
- */
17
- class CustomFieldBindingsService {
18
- knex;
19
- values;
20
- constructor({ knex, values }) {
21
- this.knex = knex;
22
- this.values = values;
23
- }
24
- async bind(db, productId, port, customFieldKey, now) {
25
- const existing = await db(BINDINGS_TABLE).where({ product_id: productId, port }).first();
26
- if (existing?.custom_field_key === customFieldKey) {
27
- await db(BINDINGS_TABLE).where('id', existing.id).update({ updated_at: now });
28
- return existing.id;
29
- }
30
- if (existing) {
31
- await db(BINDINGS_TABLE).where('id', existing.id).del();
32
- }
33
- const bindingId = new bson_objectid_1.default().toHexString();
34
- await db(BINDINGS_TABLE).insert({
35
- id: bindingId,
36
- product_id: productId,
37
- port,
38
- custom_field_key: customFieldKey,
39
- created_at: now,
40
- updated_at: now,
41
- });
42
- return bindingId;
43
- }
44
- /** Stops the writing. Whatever hangs off the binding cascades with it. */
45
- async remove(db, productId, port) {
46
- await db(BINDINGS_TABLE).where({ product_id: productId, port }).del();
47
- }
48
- /**
49
- * Values arrive in the order they are to be applied: where two land in one field, the
50
- * last of them is what the field holds.
51
- */
52
- async writeCollected(memberId, productId, collected) {
53
- for (const { port, value } of collected) {
54
- const destination = await this.resolve(productId, port);
55
- if (!destination) {
56
- continue;
57
- }
58
- await this.writeOne(memberId, destination, value);
59
- }
60
- }
61
- async writeOne(memberId, into, value) {
62
- let planned;
63
- try {
64
- planned = await this.values.planWrite({ [`${CUSTOM_NAMESPACE}.${into.key}`]: value });
65
- }
66
- catch (err) {
67
- logging_1.default.warn({
68
- event: { name: 'members.custom_fields.collected_value_rejected' },
69
- err,
70
- memberId,
71
- customFieldKey: into.key,
72
- }, 'A collected value could not be saved');
73
- return;
74
- }
75
- try {
76
- await this.values.applyWrite(memberId, planned, {
77
- writtenBy: { type: 'binding', id: into.bindingId },
78
- });
79
- }
80
- catch (err) {
81
- logging_1.default.error({
82
- event: { name: 'members.custom_fields.collected_value_write_failed' },
83
- err,
84
- memberId,
85
- customFieldKey: into.key,
86
- bindingId: into.bindingId,
87
- }, 'Failed to store a collected custom field value');
88
- }
89
- }
90
- async resolve(productId, port) {
91
- const row = await this.knex(BINDINGS_TABLE)
92
- .join(FIELDS_TABLE, `${BINDINGS_TABLE}.custom_field_key`, `${FIELDS_TABLE}.key`)
93
- .where(`${BINDINGS_TABLE}.product_id`, productId)
94
- .where(`${BINDINGS_TABLE}.port`, port)
95
- // An archived destination is still where this goes, and still not somewhere a value
96
- // can land, so the write drops rather than waiting.
97
- .where(`${FIELDS_TABLE}.status`, schema_1.FIELD_STATUS.active)
98
- .select(`${BINDINGS_TABLE}.id as binding_id`, `${FIELDS_TABLE}.key`, `${FIELDS_TABLE}.type`)
99
- .first();
100
- if (!row) {
101
- return null;
102
- }
103
- // Decoded rather than trusted: a join is a read boundary, and `type` is what decides
104
- // how the collected value is read. Unreadable counts as unresolved rather than
105
- // throwing, so one bad row skips its value the way an unbound port does instead of
106
- // failing everything else the same checkout collected.
107
- const bound = schema_1.DbBoundField.safeParse(row);
108
- if (!bound.success) {
109
- logging_1.default.warn({
110
- event: { name: 'members.custom_fields.binding_unreadable' },
111
- err: bound.error,
112
- productId,
113
- port,
114
- }, 'A binding could not be read');
115
- return null;
116
- }
117
- return { bindingId: bound.data.binding_id, key: bound.data.key, type: bound.data.type };
118
- }
119
- }
120
- exports.CustomFieldBindingsService = CustomFieldBindingsService;