ghost 6.60.0 → 6.62.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 (613) hide show
  1. package/components/ghost-storage-base-3.0.0.tgz +0 -0
  2. package/components/tryghost-adapter-base-cache-0.2.0.tgz +0 -0
  3. package/components/tryghost-adapter-base-jobs-0.0.0.tgz +0 -0
  4. package/components/tryghost-adapter-base-redirects-0.0.0.tgz +0 -0
  5. package/components/tryghost-adapter-base-route-settings-0.0.0.tgz +0 -0
  6. package/components/tryghost-adapter-base-scheduling-0.2.3.tgz +0 -0
  7. package/components/tryghost-adapter-base-sso-0.1.3.tgz +0 -0
  8. package/components/tryghost-admin-api-schema-0.0.0.tgz +0 -0
  9. package/components/tryghost-checkout-0.0.0.tgz +0 -0
  10. package/components/tryghost-custom-field-types-0.0.0.tgz +0 -0
  11. package/components/tryghost-i18n-0.0.0.tgz +0 -0
  12. package/components/tryghost-kg-card-factory-5.2.4.tgz +0 -0
  13. package/components/tryghost-kg-clean-basic-html-4.3.4.tgz +0 -0
  14. package/components/tryghost-kg-converters-1.2.5.tgz +0 -0
  15. package/components/tryghost-kg-default-cards-10.3.5.tgz +0 -0
  16. package/components/tryghost-kg-default-nodes-2.2.1.tgz +0 -0
  17. package/components/tryghost-kg-default-transforms-1.3.4.tgz +0 -0
  18. package/components/tryghost-kg-html-to-lexical-1.4.0.tgz +0 -0
  19. package/components/tryghost-kg-lexical-html-renderer-1.5.0.tgz +0 -0
  20. package/components/tryghost-kg-markdown-html-renderer-7.2.4.tgz +0 -0
  21. package/components/tryghost-kg-utils-1.1.4.tgz +0 -0
  22. package/components/tryghost-nql-string-0.0.0.tgz +0 -0
  23. package/components/tryghost-parse-email-address-0.0.0.tgz +0 -0
  24. package/content/settings/README.md +1 -1
  25. package/content/themes/casper/.gitignore +28 -0
  26. package/content/themes/casper/assets/built/casper.js +1 -1
  27. package/content/themes/casper/assets/built/screen.css +1 -1
  28. package/content/themes/casper/assets/css/screen.css +2 -1
  29. package/content/themes/casper/assets/js/lightbox.js +63 -46
  30. package/content/themes/casper/package.json +6 -6
  31. package/content/themes/casper/page.hbs +1 -0
  32. package/content/themes/casper/post.hbs +1 -0
  33. package/content/themes/source/.gitignore +28 -0
  34. package/content/themes/source/assets/built/screen.css +1 -1
  35. package/content/themes/source/assets/built/source.js +1 -1
  36. package/content/themes/source/assets/css/screen.css +2 -1
  37. package/content/themes/source/assets/js/lightbox.js +62 -45
  38. package/content/themes/source/assets/js/main.js +2 -2
  39. package/content/themes/source/package.json +4 -4
  40. package/content/themes/source/partials/feature-image.hbs +1 -0
  41. package/core/boot.js +62 -21
  42. package/core/built/admin/assets/Combination-B0l4MKVh.js +41 -0
  43. package/core/built/admin/assets/InterVariable-DiVDrmQJ.woff2 +0 -0
  44. package/core/built/admin/assets/InterVariable-Italic-FCBEiFp6.woff2 +0 -0
  45. package/core/built/admin/assets/{PolarAngleAxis-C4qtHy1B.js → PolarAngleAxis-pkMyqz8g.js} +1 -1
  46. package/core/built/admin/assets/{RadialBarChart-Bh09Stsj.js → RadialBarChart-JAKoS4KT.js} +1 -1
  47. package/core/built/admin/assets/{about-BgpmhCuM.js → about-Dyae_UT6.js} +1 -1
  48. package/core/built/admin/assets/account-migration-CESa0mnX.js +1 -0
  49. package/core/built/admin/assets/{action-list-lGzZLHc8.js → action-list-C4v0-du8.js} +1 -1
  50. package/core/built/admin/assets/activitypub/{account-migration-DMHuPnJn.js → account-migration-By69CgCp.js} +16 -16
  51. package/core/built/admin/assets/activitypub/activitypub.js +9 -10
  52. package/core/built/admin/assets/activitypub/{avatar-DhTo5D1B.js → avatar-DLPL3Abs.js} +59 -68
  53. package/core/built/admin/assets/activitypub/{avatar-flipboard-DnVgbEfa.js → avatar-flipboard-C9iDY-QV.js} +2 -2
  54. package/core/built/admin/assets/activitypub/{bluesky-sharing-BT4zAlW7.js → bluesky-sharing-BJcPMrDd.js} +37 -37
  55. package/core/built/admin/assets/activitypub/{content-formatters-BeDZ-DIa.js → content-formatters-3rTHg3mp.js} +18 -18
  56. package/core/built/admin/assets/activitypub/{copy-8sqxUuNd.js → copy-DIAOQoCZ.js} +2 -2
  57. package/core/built/admin/assets/activitypub/{domain-xQDDu1CS.js → domain-DUR4xSkV.js} +121 -121
  58. package/core/built/admin/assets/activitypub/{edit-profile-BXdF_r2G.js → edit-profile-BqtfzxCp.js} +40 -40
  59. package/core/built/admin/assets/activitypub/{explore-CMt7gKlL.js → explore-BxuJd-J4.js} +27 -27
  60. package/core/built/admin/assets/activitypub/{feed-Bwqdddp_.js → feed-BM1TcksA.js} +51 -51
  61. package/core/built/admin/assets/activitypub/{field-4co_8FVg.js → field-Dn7HHx2-.js} +3 -3
  62. package/core/built/admin/assets/activitypub/{hash-DwakMs4X.js → hash-Bm3WxYN4.js} +2 -2
  63. package/core/built/admin/assets/activitypub/inbox-CCjkuow2.js +1284 -0
  64. package/core/built/admin/assets/activitypub/{inbox-ckD4wo_r.js → inbox-d8oJRTf4.js} +2 -2
  65. package/core/built/admin/assets/activitypub/label-1AA_s9Fa.js +16 -0
  66. package/core/built/admin/assets/activitypub/layout-2-0bw6HN.js +1 -0
  67. package/core/built/admin/assets/activitypub/{moderation-KCCO7L2J.js → moderation-CnmxEB8w.js} +91 -91
  68. package/core/built/admin/assets/activitypub/{note-BX_Bz5A0.js → note-ZKc_Bnba.js} +24 -24
  69. package/core/built/admin/assets/activitypub/{notifications-BQOYGvRv.js → notifications-CB2tJZau.js} +51 -51
  70. package/core/built/admin/assets/activitypub/{onboarding-CNelD_uF.js → onboarding-BsJ9E5qf.js} +2 -2
  71. package/core/built/admin/assets/activitypub/{onboarding-mat5Hrl0.js → onboarding-CSUJJIlh.js} +2 -2
  72. package/core/built/admin/assets/activitypub/{preferences-6h43G9_q.js → preferences-0-JZnUkI.js} +1519 -1519
  73. package/core/built/admin/assets/activitypub/{profile-BMN9VVZ2.js → profile-C35cFIhM.js} +256 -256
  74. package/core/built/admin/assets/activitypub/{reply-ZNo04xsO.js → reply-DYK5vVqb.js} +2 -2
  75. package/core/built/admin/assets/activitypub/{routes-3B9mUQ7i.js → routes-BD4vscyc.js} +796 -790
  76. package/core/built/admin/assets/activitypub/{separator-D9taVCCa.js → separator-BbQqTm-p.js} +3 -3
  77. package/core/built/admin/assets/activitypub/settings-BsMROdqh.js +315 -0
  78. package/core/built/admin/assets/activitypub/{site-DHoMupSB.js → site-O0RL9YCN.js} +2 -2
  79. package/core/built/admin/assets/activitypub/{step-1-BsGGnBuT.js → step-1-BMSx7c_X.js} +6 -6
  80. package/core/built/admin/assets/activitypub/{step-2-teosIS0k.js → step-2-DtPQzlTH.js} +6 -6
  81. package/core/built/admin/assets/activitypub/{step-3-BjD5TokC.js → step-3-CLlOZTyt.js} +11 -11
  82. package/core/built/admin/assets/activitypub/{tabs-Cvwl1wXU.js → tabs-Dxk-b9M-.js} +306 -306
  83. package/core/built/admin/assets/activitypub/{topic-filter-C3LZJc2X.js → topic-filter-5yZH6tId.js} +3 -3
  84. package/core/built/admin/assets/activitypub/{use-activity-pub-queries-Dp9f0gov.js → use-activity-pub-queries-CV50qe03.js} +3 -3
  85. package/core/built/admin/assets/activitypub/{use-navigate-with-base-path-C4RI0sa9.js → use-navigate-with-base-path-Bmk5h4lW.js} +220 -220
  86. package/core/built/admin/assets/activitypub/{use-reply-chain-data-C2oNDMUH.js → use-reply-chain-data-Cbvzgjzd.js} +30 -30
  87. package/core/built/admin/assets/activitypub/{users-CoX6FT_K.js → users-BjcoP_HC.js} +7 -5
  88. package/core/built/admin/assets/activitypub/{x-Dxm6pV9X.js → x-DbQZOLiI.js} +2 -2
  89. package/core/built/admin/assets/add-integration-modal-BlF6rs_f.js +1 -0
  90. package/core/built/admin/assets/add-newsletter-modal-CglVQqah.js +1 -0
  91. package/core/built/admin/assets/add-recommendation-modal-wz7BsuaG.js +1 -0
  92. package/core/built/admin/assets/analytics-C4HE1gBg.js +1 -0
  93. package/core/built/admin/assets/{announcement-bar-modal-BTHiy1ZO.js → announcement-bar-modal-Ci4zz8jO.js} +1 -1
  94. package/core/built/admin/assets/{api-keys-Boy5pLbD.js → api-keys-Ck-Yteiv.js} +1 -1
  95. package/core/built/admin/assets/audience-CtbA54Sn.js +1 -0
  96. package/core/built/admin/assets/{automated-emails-te1D5kq-.js → automated-emails-D5VVMND9.js} +1 -1
  97. package/core/built/admin/assets/automations-CzKt5fb8.js +1 -0
  98. package/core/built/admin/assets/bluesky-sharing-BEtJ_gL_.js +1 -0
  99. package/core/built/admin/assets/{box-By_EgGtm.js → box-CdfQAP_F.js} +1 -1
  100. package/core/built/admin/assets/{brand-icon-09YqFZjV.js → brand-icon-CrIGOA3Z.js} +1 -1
  101. package/core/built/admin/assets/{breadcrumb-CcFr_ltt.js → breadcrumb-zUrZrBtW.js} +1 -1
  102. package/core/built/admin/assets/{button-BshWPHvn.js → button-eNMKQWXr.js} +1 -1
  103. package/core/built/admin/assets/{card-CiiE7QfM.js → card--VNbfgo3.js} +1 -1
  104. package/core/built/admin/assets/{chart-BnXyfH11.js → chart-BrhA41Zi.js} +1 -1
  105. package/core/built/admin/assets/chart-helpers-CfBKt0vT.js +1 -0
  106. package/core/built/admin/assets/{checkbox-Dwwr_3Py.js → checkbox-CgOn_tKW.js} +1 -1
  107. package/core/built/admin/assets/{chunk.524.91ecb33e6afc3bd8949b.js → chunk.524.a697dee88db67fdf6021.js} +4 -4
  108. package/core/built/admin/assets/{chunk.582.512549909741883f960c.js → chunk.582.5ed5d124cfca9c259b9c.js} +6 -6
  109. package/core/built/admin/assets/{chunk.16.f76a6314082d813d67e0.js → chunk.598.7e056fabb47ce7dbd73f.js} +14 -14
  110. package/core/built/admin/assets/{code-editor-view-BwIdPy_k.js → code-editor-view-BYNoAoNV.js} +1 -1
  111. package/core/built/admin/assets/{code-editor-view-CtkF82Fv.js → code-editor-view-K2wI-I5f.js} +1 -1
  112. package/core/built/admin/assets/color-picker-Ddw80xX6.js +3 -0
  113. package/core/built/admin/assets/color-picker-field-D9nUhvA7.js +1 -0
  114. package/core/built/admin/assets/combobox-w9j8PPQT.js +1 -0
  115. package/core/built/admin/assets/command-BfpHORBv.js +1 -0
  116. package/core/built/admin/assets/comments-BLmCmyCs.js +1 -0
  117. package/core/built/admin/assets/confirmation-context-CBM8G0Vj.js +1 -0
  118. package/core/built/admin/assets/{container-LiZf3XdY.js → container-BuQG1wuP.js} +1 -1
  119. package/core/built/admin/assets/{content-api-modal-BtpNI92-.js → content-api-modal-TXRz3U7S.js} +1 -1
  120. package/core/built/admin/assets/context-menu-_QMdd3kp.js +1 -0
  121. package/core/built/admin/assets/{copy-field-CglgRZyG.js → copy-field-6N01S07E.js} +1 -1
  122. package/core/built/admin/assets/create-ghost-browse-value-source-qIBymvvf.js +1 -0
  123. package/core/built/admin/assets/custom-field-type-option-BddFlJFa.js +1 -0
  124. package/core/built/admin/assets/custom-integration-modal-DmNquxUV.js +1 -0
  125. package/core/built/admin/assets/{data-list-CupF7bjM.js → data-list-CA2jYGPq.js} +1 -1
  126. package/core/built/admin/assets/{date-range-select-JPwM0yUj.js → date-range-select-uvz_DtPh.js} +1 -1
  127. package/core/built/admin/assets/design-and-theme-modal-BSmo12Op.js +2 -0
  128. package/core/built/admin/assets/{detail-page-D8lx2SdP.js → detail-page-Dnv-CdR1.js} +1 -1
  129. package/core/built/admin/assets/dirty-confirm-dialog-BZ1iytEd.js +1 -0
  130. package/core/built/admin/assets/{disabled-sources-indicator-BTJ2ClQu.js → disabled-sources-indicator-DMRrxsiJ.js} +1 -1
  131. package/core/built/admin/assets/{dist-DzcfoDJ3.js → dist-8YJUlf3B.js} +1 -1
  132. package/core/built/admin/assets/{dist-Cb5RSHSg.js → dist-B3keLvjj.js} +1 -1
  133. package/core/built/admin/assets/dist-Dcsslyo72.js +1 -0
  134. package/core/built/admin/assets/{dist-BT_Z-eCn.js → dist-Dgt2cr6a.js} +1 -1
  135. package/core/built/admin/assets/domain-BNYrt0aD.js +1 -0
  136. package/core/built/admin/assets/dropzone-D7nFdAe5.js +5 -0
  137. package/core/built/admin/assets/edit-profile-C5Asm4LA.js +1 -0
  138. package/core/built/admin/assets/editor-REokrzci.js +8 -0
  139. package/core/built/admin/assets/{embed-signup-form-modal-BFTPf04i.js → embed-signup-form-modal-Ds6mPEi5.js} +1 -1
  140. package/core/built/admin/assets/{empty-indicator-WB1WgT9h.js → empty-indicator-D9QdpuNX.js} +1 -1
  141. package/core/built/admin/assets/en-B1jX3WMs.js +1 -0
  142. package/core/built/admin/assets/explore-UY10Egsp.js +1 -0
  143. package/core/built/admin/assets/feature-image-placeholder-D1iF_8bc.js +1 -0
  144. package/core/built/admin/assets/feed-81C8mJWR.js +1 -0
  145. package/core/built/admin/assets/{field-LmNk7wZh.js → field-Dihp5p18.js} +1 -1
  146. package/core/built/admin/assets/filter-bar-Da1qxybu.js +1 -0
  147. package/core/built/admin/assets/filter-sources-BO9xUPj7.js +1 -0
  148. package/core/built/admin/assets/filters-CRUWecfY.js +1 -0
  149. package/core/built/admin/assets/filters-DirqNXjH.js +1 -0
  150. package/core/built/admin/assets/first-promoter-modal-CT6MxYZb.js +1 -0
  151. package/core/built/admin/assets/{ghost-c8807202a07c20030acb719ee0114815.css → ghost-8eabfc1ece81b03cf7b90780d31487e8.css} +1 -1
  152. package/core/built/admin/assets/{ghost-403cb39badad3df411fc0ba27d220047.js → ghost-c2848508292937415f20f5a830eea59e.js} +31 -28
  153. package/core/built/admin/assets/{ghost-dark-fbf1e384aaef3ae315e540f0eb7373a7.css → ghost-dark-a7bebe2c561f55369dcf29f4c820f7ff.css} +1 -1
  154. package/core/built/admin/assets/gift-link-modal-CQVAye17.js +1 -0
  155. package/core/built/admin/assets/{grid-CUciBfjf.js → grid-Dj29PY05.js} +1 -1
  156. package/core/built/admin/assets/growth-BWIu-6xj.js +3 -0
  157. package/core/built/admin/assets/growth-DU29oxeA.js +1 -0
  158. package/core/built/admin/assets/{heading-CRZZ2FUe.js → heading-Dh5SFVjL.js} +1 -1
  159. package/core/built/admin/assets/history-modal-CFd1Hvx6.js +1 -0
  160. package/core/built/admin/assets/html-field-CJBCLTvv.js +1 -0
  161. package/core/built/admin/assets/{images-C0XvUYMb.js → images-scfkWZiK.js} +1 -1
  162. package/core/built/admin/assets/{inbox-DZXDUt4s.js → inbox-Mcp4DXZN.js} +14 -14
  163. package/core/built/admin/assets/index-6MkPdCtr.js +4 -0
  164. package/core/built/admin/assets/index-Bn7QhcZu.css +2 -0
  165. package/core/built/admin/assets/index.es-CNnuNH0d.js +1 -0
  166. package/core/built/admin/assets/{inline-Cw-gigDW.js → inline-BWSs_VzR.js} +1 -1
  167. package/core/built/admin/assets/{input-group-BPAxETpQ.js → input-group-CMhe2DvY.js} +1 -1
  168. package/core/built/admin/assets/{input-surface-BdOe4KzO.js → input-surface-BsrIZeSF.js} +1 -1
  169. package/core/built/admin/assets/{integration-header-B4DyXV06.js → integration-header-Bm6IDb1A.js} +1 -1
  170. package/core/built/admin/assets/invite-user-modal-DfheMXs0.js +1 -0
  171. package/core/built/admin/assets/koenig-lexical/koenig-lexical.js +14 -14
  172. package/core/built/admin/assets/koenig-lexical/koenig-lexical.umd.js +3 -3
  173. package/core/built/admin/assets/koenig-lexical/style.css +1 -1
  174. package/core/built/admin/assets/{koenig-lexical-60O_8aiO.js → koenig-lexical-DBSqAuiI.js} +3 -3
  175. package/core/built/admin/assets/koenig-loader-aFQNlJlD.js +2 -0
  176. package/core/built/admin/assets/kpi-card-DBRMfGOW.js +1 -0
  177. package/core/built/admin/assets/{kpi-card-fUHZlzBX.js → kpi-card-DFafD1qq.js} +1 -1
  178. package/core/built/admin/assets/kpi-helpers-Cv8i8hns.js +1 -0
  179. package/core/built/admin/assets/kpi-tabs-BJItvLYm.js +1 -0
  180. package/core/built/admin/assets/{label-VIG969IC.js → label-BnSCvffu.js} +1 -1
  181. package/core/built/admin/assets/label-picker-KVoo91sh.js +1 -0
  182. package/core/built/admin/assets/layout-Bjv2Ll-5.js +1 -0
  183. package/core/built/admin/assets/{link-helpers-Dtq9fxQg.js → link-helpers-MVDdnFCY.js} +1 -1
  184. package/core/built/admin/assets/{list-page-CdsnQR9N.js → list-page-BucXJ0hi.js} +1 -1
  185. package/core/built/admin/assets/member-custom-fields-DDQV6QeG.js +1 -0
  186. package/core/built/admin/assets/member-detail-CdJF6Agw.js +1 -0
  187. package/core/built/admin/assets/members-DjQbq9Z2.js +4 -0
  188. package/core/built/admin/assets/{modal-page-BMTzFHVO.js → modal-page-xCivTMvI.js} +1 -1
  189. package/core/built/admin/assets/moderation-AgCIEso4.js +1 -0
  190. package/core/built/admin/assets/{multi-select-combobox-CGohnsxJ.js → multi-select-combobox-BcITkUVr.js} +1 -1
  191. package/core/built/admin/assets/navigation-modal-BkT7b1M2.js +1 -0
  192. package/core/built/admin/assets/newsletter-BMMAuvgq.js +1 -0
  193. package/core/built/admin/assets/newsletter-detail-modal-0SCJ7Zpm.js +1 -0
  194. package/core/built/admin/assets/{newsletter-emails-D5ql1rud.js → newsletter-emails-DKzwafuh.js} +1 -1
  195. package/core/built/admin/assets/newsletters-BRBb_uQC.js +1 -0
  196. package/core/built/admin/assets/note-DyGHtS9a.js +1 -0
  197. package/core/built/admin/assets/notifications-ZgWniKna.js +1 -0
  198. package/core/built/admin/assets/nql-BLpCn7qX.js +21 -0
  199. package/core/built/admin/assets/offers-container-modal-B-E8TIWr.js +1 -0
  200. package/core/built/admin/assets/{onboarding-B4YhlZ0i.js → onboarding-CzIsre-d.js} +1 -1
  201. package/core/built/admin/assets/onboarding-qg8Akovm.js +1 -0
  202. package/core/built/admin/assets/{onboarding-route-Cu_ROWPn.js → onboarding-route-CaavZulg.js} +1 -1
  203. package/core/built/admin/assets/overview-BW8GLeYi.js +1 -0
  204. package/core/built/admin/assets/overview-BkXZNzaZ.js +1 -0
  205. package/core/built/admin/assets/{page-header-Cfds8pCg.js → page-header-De0VzKBi.js} +1 -1
  206. package/core/built/admin/assets/pagemenu-B5KKCpbA.js +1 -0
  207. package/core/built/admin/assets/pages-jgaFm69d.js +1 -0
  208. package/core/built/admin/assets/pages-route-CIUAQxtY.js +1 -0
  209. package/core/built/admin/assets/papaparse.min-cQwnxGCG.js +10 -0
  210. package/core/built/admin/assets/{pintura-modal-TDTrJ89x.js → pintura-modal-BZ2J9w3n.js} +1 -1
  211. package/core/built/admin/assets/portal-frame-B6Hr9wHc.js +1 -0
  212. package/core/built/admin/assets/portal-modal-D4ceei3t.js +1 -0
  213. package/core/built/admin/assets/post-analytics-header-BYCsT0GP.js +1 -0
  214. package/core/built/admin/assets/post-analytics-ot7f6pih.js +1 -0
  215. package/core/built/admin/assets/{post-analytics-provider-Cu3jNeFh.js → post-analytics-provider-Bo1gmYaP.js} +1 -1
  216. package/core/built/admin/assets/{post-share-modal-P1_M6o-H.js → post-share-modal-C-PaYZ_e.js} +1 -1
  217. package/core/built/admin/assets/posts-DuGazgTb.js +1 -0
  218. package/core/built/admin/assets/posts-list-screen-CBGGgjjj.js +2 -0
  219. package/core/built/admin/assets/posts-route-D6xmS7Vf.js +1 -0
  220. package/core/built/admin/assets/preferences-C5YJLp74.js +5 -0
  221. package/core/built/admin/assets/{preview-chrome-BOVO6_PE.js → preview-chrome-BljUBlOk.js} +1 -1
  222. package/core/built/admin/assets/{preview-modal-MlTjP8UU.js → preview-modal-BfeFqi5y.js} +1 -1
  223. package/core/built/admin/assets/profile-B8mx2yAu.js +1 -0
  224. package/core/built/admin/assets/{radio-group-CjtmsCPl.js → radio-group-DczlLKOn.js} +1 -1
  225. package/core/built/admin/assets/{router-provider-CJC58zTy.js → router-provider-B0gZyiGJ.js} +1 -1
  226. package/core/built/admin/assets/{schemas-CRsC53ls.js → schemas-DppqmpeJ.js} +2 -2
  227. package/core/built/admin/assets/select-cb0t_TAJ.js +1 -0
  228. package/core/built/admin/assets/settings-DZqxR0Da.js +1 -0
  229. package/core/built/admin/assets/settings-DvfTNdHQ.js +4 -0
  230. package/core/built/admin/assets/{settings-breadcrumbs-sLDNedBW.js → settings-breadcrumbs-DLzbRRSt.js} +1 -1
  231. package/core/built/admin/assets/{shade-app-F7WxOyfk-nufqw1hd.js → shade-app-CcS3f8MZ-vwURazk8.js} +2 -2
  232. package/core/built/admin/assets/share-modal-D2-Bz1_I.js +1 -0
  233. package/core/built/admin/assets/{skeleton-D7hwjdry.js → skeleton-Ce9GgUpf.js} +1 -1
  234. package/core/built/admin/assets/slack-modal-DYDTUria.js +1 -0
  235. package/core/built/admin/assets/sort-button-VVeQjjbu.js +1 -0
  236. package/core/built/admin/assets/{source-icon-BPsD5ees.js → source-icon-Ck5_5Kgq.js} +1 -1
  237. package/core/built/admin/assets/{stack-CIfOAAVf.js → stack-B2eszIiq.js} +1 -1
  238. package/core/built/admin/assets/stats-Rjmk5owg.js +1 -0
  239. package/core/built/admin/assets/stats-view-BGGmkmgv.js +1 -0
  240. package/core/built/admin/assets/{step-1-CMta6YFO.js → step-1-CsaBjeN4.js} +1 -1
  241. package/core/built/admin/assets/{step-2-BG04nh5q.js → step-2-D2vnxOOM.js} +1 -1
  242. package/core/built/admin/assets/{step-3-ZnMaVIPj.js → step-3-wBoLdGEb.js} +2 -2
  243. package/core/built/admin/assets/{stripe-button-DDoUKN5a.js → stripe-button-CDgLz0S0.js} +1 -1
  244. package/core/built/admin/assets/stripe-connect-modal-CSjMJetP.js +1 -0
  245. package/core/built/admin/assets/{switch-C9djUIMO.js → switch-CI4gLWqb.js} +1 -1
  246. package/core/built/admin/assets/{table-CrqQtkR2.js → table-Do6iQ83Q.js} +1 -1
  247. package/core/built/admin/assets/{tabs-CGisSbWq.js → tabs-D2yWLMp_.js} +1 -1
  248. package/core/built/admin/assets/tag-detail-BhXlOsCa.js +2 -0
  249. package/core/built/admin/assets/tags-ldukRApe.js +1 -0
  250. package/core/built/admin/assets/testimonials-modal-CtnZBJKl.js +1 -0
  251. package/core/built/admin/assets/{text-DU9Hv33_.js → text-BQDSDsKs.js} +1 -1
  252. package/core/built/admin/assets/{textarea-d9qEkMOP.js → textarea-DJ1Q5V39.js} +1 -1
  253. package/core/built/admin/assets/tier-detail-modal-BOs8e_G8.js +1 -0
  254. package/core/built/admin/assets/{toggle-group-CtKZURJd.js → toggle-group-ByUJsxwD.js} +1 -1
  255. package/core/built/admin/assets/{topic-filter-D8JT8Tq1.js → topic-filter-BgC3g5_v.js} +1 -1
  256. package/core/built/admin/assets/{transistor-modal-6PUf0idx.js → transistor-modal-Drr0SNfo.js} +1 -1
  257. package/core/built/admin/assets/trend-badge-6ye93YAW.js +1 -0
  258. package/core/built/admin/assets/{unsplash-modal-BPuDBPja.js → unsplash-modal-p6AoQoWp.js} +1 -1
  259. package/core/built/admin/assets/{use-analytics-data--opuzwcz.js → use-analytics-data-CWCMAESo.js} +1 -1
  260. package/core/built/admin/assets/use-check-theme-limit-error-B8bjF-gO.css +1 -0
  261. package/core/built/admin/assets/use-check-theme-limit-error-Cw3WQHy8.js +2 -0
  262. package/core/built/admin/assets/use-filter-params-BIni9taJ.js +1 -0
  263. package/core/built/admin/assets/use-growth-stats-DCVG3s9w.js +1 -0
  264. package/core/built/admin/assets/{use-limiter-TDSNiHPB.js → use-limiter-D2WRRx0H.js} +1 -1
  265. package/core/built/admin/assets/{use-navigate-with-base-path-CK989MlC.js → use-navigate-with-base-path-BHPA228f.js} +1 -1
  266. package/core/built/admin/assets/{use-pintura-config-CnCGrDFk.js → use-pintura-config-h-J0Lvta.js} +1 -1
  267. package/core/built/admin/assets/{use-pintura-editor-ntphvtUd.js → use-pintura-editor-BfN1UwzH.js} +1 -1
  268. package/core/built/admin/assets/use-post-referrers-Czg47m8s.js +1 -0
  269. package/core/built/admin/assets/use-reply-chain-data-ns0caK8k.js +1 -0
  270. package/core/built/admin/assets/{use-router-history-entry-BwfQS2mq.js → use-router-history-entry-uldn7zJO.js} +1 -1
  271. package/core/built/admin/assets/{use-setting-group-DQxV42-O.js → use-setting-group-DpcuCUDg.js} +1 -1
  272. package/core/built/admin/assets/use-settings-navigation-CZjGrhsp.js +1 -0
  273. package/core/built/admin/assets/{use-simple-pagination-B2TdNX67.js → use-simple-pagination-DzJWobPR.js} +1 -1
  274. package/core/built/admin/assets/{use-staff-users-QrR9voeC.js → use-staff-users-Csipb-O0.js} +1 -1
  275. package/core/built/admin/assets/use-tinybird-query-CSnGXzZh.js +1 -0
  276. package/core/built/admin/assets/use-tinybird-token-DTOKRR7e.js +1 -0
  277. package/core/built/admin/assets/{use-unsaved-changes-guard-DpYJcj1d.js → use-unsaved-changes-guard-CBzs-KPi.js} +1 -1
  278. package/core/built/admin/assets/{use-url-input-WnIqckzS.js → use-url-input-DFr8lCbS.js} +1 -1
  279. package/core/built/admin/assets/user-detail-modal-B_iUClI6.js +1 -0
  280. package/core/built/admin/assets/users-Cg-OeGzC.js +1 -0
  281. package/core/built/admin/assets/{virtual-list-D3MfPNOh.js → virtual-list-BW-padMe.js} +1 -1
  282. package/core/built/admin/assets/web-C1v33ehA.js +2 -0
  283. package/core/built/admin/assets/web-C4BKzn2T.js +1 -0
  284. package/core/built/admin/assets/{zapier-modal-BO6PS_Vd.js → zapier-modal-BBFfI6Ml.js} +1 -1
  285. package/core/built/admin/index.html +24 -30
  286. package/core/frontend/apps/private-blogging/lib/views/private.hbs +44 -43
  287. package/core/frontend/helpers/cancel_link.js +2 -2
  288. package/core/frontend/helpers/pagination.js +2 -2
  289. package/core/frontend/helpers/social_accounts.js +2 -2
  290. package/core/frontend/public/ghost.css +1 -1
  291. package/core/frontend/public/ghost.min.css +1 -1
  292. package/core/frontend/services/rendering/renderer.js +15 -0
  293. package/core/frontend/services/sitemap/user-map-generator.js +9 -2
  294. package/core/server/adapters/storage/LocalStorageBase.js +8 -5
  295. package/core/server/api/endpoints/db.js +19 -5
  296. package/core/server/api/endpoints/index.js +6 -2
  297. package/core/server/api/endpoints/mail.js +1 -1
  298. package/core/server/api/endpoints/member-metafields.js +89 -0
  299. package/core/server/api/endpoints/members.js +4 -4
  300. package/core/server/api/endpoints/posts.js +4 -3
  301. package/core/server/api/endpoints/tiers-checkout-config.js +59 -0
  302. package/core/server/api/endpoints/utils/serializers/input/members.js +4 -7
  303. package/core/server/api/endpoints/utils/serializers/output/config.js +1 -0
  304. package/core/server/api/endpoints/utils/serializers/output/index.js +6 -2
  305. package/core/server/api/endpoints/utils/serializers/output/{member-custom-fields.js → member-metafields.js} +2 -4
  306. package/core/server/api/endpoints/utils/serializers/output/members.js +2 -4
  307. package/core/server/api/endpoints/utils/serializers/output/tiers-checkout-config.js +12 -0
  308. package/core/server/api/endpoints/utils/validators/input/invitations.js +0 -5
  309. package/core/server/api/endpoints/utils/validators/input/pages.js +1 -1
  310. package/core/server/api/endpoints/utils/validators/input/posts.js +1 -1
  311. package/core/server/data/exporter/table-lists.js +3 -0
  312. package/core/server/data/importer/content-files.js +57 -0
  313. package/core/server/data/importer/handlers/image.js +2 -2
  314. package/core/server/data/importer/import-archive.js +131 -0
  315. package/core/server/data/importer/import-manager.js +18 -180
  316. package/core/server/data/importer/importers/content-file-importer.js +66 -4
  317. package/core/server/data/importer/importers/data/data-importer.js +3 -3
  318. package/core/server/data/migrations/utils/migrations.js +1 -1
  319. package/core/server/data/migrations/versions/6.61/2026-08-19-14-30-20-add-written-by-to-members-custom-field-values.js +42 -0
  320. package/core/server/data/migrations/versions/6.61/2026-08-19-14-38-53-add-members-custom-field-bindings-table.js +26 -0
  321. package/core/server/data/migrations/versions/6.61/2026-08-19-14-48-06-add-tier-checkout-field-tables.js +35 -0
  322. package/core/server/data/schema/schema.js +90 -0
  323. package/core/server/data/seeders/importers/automation-action-revisions-importer.js +3 -3
  324. package/core/server/data/seeders/importers/automation-actions-importer.js +3 -3
  325. package/core/server/data/seeders/importers/automation-run-steps-importer.js +3 -3
  326. package/core/server/data/seeders/importers/automation-runs-importer.js +5 -5
  327. package/core/server/data/seeders/importers/automations-importer.js +3 -3
  328. package/core/server/data/seeders/importers/comment-reports-importer.js +1 -1
  329. package/core/server/data/seeders/importers/comments-importer.js +1 -1
  330. package/core/server/data/seeders/importers/email-batches-importer.js +1 -1
  331. package/core/server/data/seeders/importers/email-recipients-importer.js +1 -1
  332. package/core/server/data/seeders/importers/emails-importer.js +1 -1
  333. package/core/server/data/seeders/importers/labels-importer.js +1 -1
  334. package/core/server/data/seeders/importers/members-click-events-importer.js +1 -1
  335. package/core/server/data/seeders/importers/members-created-events-importer.js +1 -1
  336. package/core/server/data/seeders/importers/members-feedback-importer.js +1 -1
  337. package/core/server/data/seeders/importers/members-importer.js +1 -1
  338. package/core/server/data/seeders/importers/members-login-events-importer.js +1 -1
  339. package/core/server/data/seeders/importers/members-products-importer.js +1 -1
  340. package/core/server/data/seeders/importers/members-status-events-importer.js +1 -1
  341. package/core/server/data/seeders/importers/members-stripe-customers-importer.js +1 -1
  342. package/core/server/data/seeders/importers/members-stripe-customers-subscriptions-importer.js +1 -1
  343. package/core/server/data/seeders/importers/members-subscribe-events-importer.js +1 -1
  344. package/core/server/data/seeders/importers/members-subscription-created-events-importer.js +1 -1
  345. package/core/server/data/seeders/importers/offer-redemptions-importer.js +1 -1
  346. package/core/server/data/seeders/importers/offers-importer.js +1 -1
  347. package/core/server/data/seeders/importers/posts-importer.js +1 -1
  348. package/core/server/data/seeders/importers/table-importer.js +2 -2
  349. package/core/server/data/seeders/importers/tags-importer.js +1 -1
  350. package/core/server/data/seeders/importers/users-importer.js +1 -1
  351. package/core/server/data/seeders/importers/web-mentions-importer.js +1 -1
  352. package/core/server/data/seeders/utils/random.js +3 -3
  353. package/core/server/ghost-server.js +3 -2
  354. package/core/server/lib/db-types/boolean.js +18 -0
  355. package/core/server/lib/image/image-size.js +24 -0
  356. package/core/server/lib/package-json/parse.js +2 -2
  357. package/core/server/lib/promise-pool.js +31 -0
  358. package/core/server/models/member.js +6 -17
  359. package/core/server/models/post.js +2 -2
  360. package/core/server/models/relations/authors.js +2 -16
  361. package/core/server/models/user.js +9 -2
  362. package/core/server/services/auth/passwordreset.js +13 -0
  363. package/core/server/services/automations/database-automations-repository.js +26 -26
  364. package/core/server/services/automations/poll.js +1 -0
  365. package/core/server/services/comments/comments-controller.js +30 -9
  366. package/core/server/services/comments/comments-service.js +55 -5
  367. package/core/server/services/content-import/csv/formula.js +12 -0
  368. package/core/server/services/content-import/csv/index.js +6 -1
  369. package/core/server/services/content-import/csv/parse.js +27 -6
  370. package/core/server/services/content-import/csv/serialize.js +13 -0
  371. package/core/server/services/content-import/import/assets.js +74 -0
  372. package/core/server/services/content-import/import/completion-email.js +164 -0
  373. package/core/server/services/content-import/import/errors-file.js +36 -0
  374. package/core/server/services/content-import/import/importer.js +204 -54
  375. package/core/server/services/content-import/import/local-media-url.js +63 -0
  376. package/core/server/services/content-import/import/media.js +254 -0
  377. package/core/server/services/content-import/import/post-data.js +1 -1
  378. package/core/server/services/content-import/import/post-link.js +11 -0
  379. package/core/server/services/content-import/import/post-repository.js +100 -0
  380. package/core/server/services/content-import/import/reader.js +9 -2
  381. package/core/server/services/content-import/import/relations.js +149 -0
  382. package/core/server/services/content-import/import/report.js +34 -0
  383. package/core/server/services/content-import/import/row.js +11 -2
  384. package/core/server/services/content-import/import/schema.js +30 -0
  385. package/core/server/services/content-import/import/source.js +125 -0
  386. package/core/server/services/content-import/import/staged-file.js +29 -0
  387. package/core/server/services/content-import/import/store.js +25 -2
  388. package/core/server/services/content-import/index.js +58 -34
  389. package/core/server/services/content-import/jobs/content-csv-import-job.js +20 -0
  390. package/core/server/services/custom-redirects/redirect-config-parser.js +2 -2
  391. package/core/server/services/custom-redirects/redirects-service.js +1 -1
  392. package/core/server/services/custom-redirects/validation.js +1 -1
  393. package/core/server/services/email-address/email-address-parser.js +30 -38
  394. package/core/server/services/email-address/email-address-service.js +37 -4
  395. package/core/server/services/email-analytics/email-analytics-service.js +8 -1
  396. package/core/server/services/email-analytics/index.js +2 -7
  397. package/core/server/services/email-analytics/lib/queries.js +7 -1
  398. package/core/server/services/email-service/batch-sending-service.js +0 -4
  399. package/core/server/services/email-service/email-renderer.js +14 -4
  400. package/core/server/services/email-service/email-service-wrapper.js +0 -9
  401. package/core/server/services/email-service/mailgun-email-provider.js +20 -9
  402. package/core/server/services/gift-links/schema.js +3 -3
  403. package/core/server/services/gifts/CONTEXT.md +1 -1
  404. package/core/server/services/gifts/constants.js +1 -1
  405. package/core/server/services/gifts/email-templates/gift-delivery.hbs +3 -3
  406. package/core/server/services/gifts/gift-bookshelf-repository.js +2 -2
  407. package/core/server/services/gifts/gift-delivery-bookshelf-repository.js +18 -9
  408. package/core/server/services/gifts/gift-delivery-schema.js +5 -5
  409. package/core/server/services/gifts/gift-delivery-service.js +4 -0
  410. package/core/server/services/gifts/gift-email-service.js +0 -1
  411. package/core/server/services/gifts/gift-schema.js +10 -10
  412. package/core/server/services/gifts/gift-service.js +4 -2
  413. package/core/server/services/gifts/index.js +3 -3
  414. package/core/server/services/gifts/jobs/index.js +4 -4
  415. package/core/server/services/indexnow-ping/indexnow-ping-service.js +2 -2
  416. package/core/server/services/invitations/accept.js +4 -2
  417. package/core/server/services/jobs/job-service.js +0 -9
  418. package/core/server/services/jobs-service/register-job-handlers.js +25 -15
  419. package/core/server/services/lib/mailgun-client.js +44 -8
  420. package/core/server/services/mail/ghost-mailer.js +4 -4
  421. package/core/server/services/media-inliner/external-media-inliner-job.js +12 -0
  422. package/core/server/services/media-inliner/external-media-inliner.js +103 -29
  423. package/core/server/services/media-inliner/service.js +13 -41
  424. package/core/server/services/media-inliner/types.js +2 -0
  425. package/core/server/services/member-welcome-emails/service.js +7 -7
  426. package/core/server/services/members/api.js +1 -0
  427. package/core/server/services/members/import-export/csv/parse.js +0 -7
  428. package/core/server/services/members/import-export/export/exporter.js +4 -6
  429. package/core/server/services/members/import-export/import/completion-email.js +2 -5
  430. package/core/server/services/members/import-export/import/importer.js +21 -5
  431. package/core/server/services/members/import-export/import/row.js +0 -3
  432. package/core/server/services/members/import-export/import/stripe-utils.js +6 -1
  433. package/core/server/services/members/import-export/index.js +10 -12
  434. package/core/server/services/members/jobs/clean-expired-comped-job.js +7 -0
  435. package/core/server/services/members/jobs/clean-expired-comped-task.js +145 -0
  436. package/core/server/services/members/jobs/index.js +48 -24
  437. package/core/server/services/members/members-api/controllers/member-controller.js +11 -0
  438. package/core/server/services/members/members-api/controllers/router-controller.js +3 -6
  439. package/core/server/services/members/members-api/members-api.js +9 -6
  440. package/core/server/services/members/members-api/repositories/event-repository.js +0 -4
  441. package/core/server/services/members/members-api/services/member-bread-service.js +53 -63
  442. package/core/server/services/members/members-api/services/payments-service.js +47 -1
  443. package/core/server/services/members/service.js +1 -5
  444. package/core/server/services/members-custom-fields/actions.js +27 -1
  445. package/core/server/services/members-custom-fields/bindings-service.js +120 -0
  446. package/core/server/services/members-custom-fields/codec.js +3 -4
  447. package/core/server/services/members-custom-fields/definitions-service.js +165 -22
  448. package/core/server/services/members-custom-fields/filter.js +75 -93
  449. package/core/server/services/members-custom-fields/index.js +11 -4
  450. package/core/server/services/members-custom-fields/key.js +2 -1
  451. package/core/server/services/members-custom-fields/models.js +1 -1
  452. package/core/server/services/members-custom-fields/queries.js +5 -0
  453. package/core/server/services/members-custom-fields/schema.js +37 -6
  454. package/core/server/services/members-custom-fields/serializers.js +3 -5
  455. package/core/server/services/members-custom-fields/values-service.js +65 -31
  456. package/core/server/services/mentions/mention-controller.js +23 -21
  457. package/core/server/services/mentions/process-webmention-job.js +16 -0
  458. package/core/server/services/mentions/service.js +8 -4
  459. package/core/server/services/public-config/config.js +7 -0
  460. package/core/server/services/route-settings/validation-errors.js +1 -1
  461. package/core/server/services/route-settings/yaml-parser.js +1 -1
  462. package/core/server/services/settings/settings-service.js +1 -8
  463. package/core/server/services/settings-helpers/settings-helpers.js +4 -6
  464. package/core/server/services/slack-ping/slack-ping-service.js +1 -1
  465. package/core/server/services/staff/staff-service-emails.js +2 -2
  466. package/core/server/services/stripe/config.js +14 -8
  467. package/core/server/services/stripe/service.js +10 -1
  468. package/core/server/services/stripe/services/checkout/completed-session.js +68 -0
  469. package/core/server/services/stripe/services/checkout/session-options.js +100 -0
  470. package/core/server/services/stripe/services/webhook/checkout-session-event-service.js +71 -1
  471. package/core/server/services/stripe/stripe-api.js +31 -0
  472. package/core/server/services/stripe/stripe-service.js +26 -9
  473. package/core/server/services/stripe/webhook-controller.js +10 -0
  474. package/core/server/services/tier-checkout-config/codec.js +99 -0
  475. package/core/server/services/tier-checkout-config/index.js +26 -0
  476. package/core/server/services/tier-checkout-config/models.js +63 -0
  477. package/core/server/services/tier-checkout-config/queries.js +80 -0
  478. package/core/server/services/tier-checkout-config/schema.js +33 -0
  479. package/core/server/services/tier-checkout-config/serializers.js +128 -0
  480. package/core/server/services/tier-checkout-config/service.js +304 -0
  481. package/core/server/services/tiers/service.js +21 -0
  482. package/core/server/services/update-check/index.js +13 -13
  483. package/core/server/services/update-check/jobs/update-check-job.js +7 -0
  484. package/core/server/services/update-check/update-check-service.js +2 -2
  485. package/core/server/web/admin/controller.js +1 -1
  486. package/core/server/web/api/endpoints/admin/routes.js +34 -20
  487. package/core/server/web/api/middleware/upload.js +2 -2
  488. package/core/server/web/parent/app.js +5 -0
  489. package/core/server/web/parent/middleware/filter-query-parameters.js +94 -0
  490. package/core/server/web/parent/middleware/index.js +1 -0
  491. package/core/server/web/query-parameter-policy/index.js +9 -0
  492. package/core/server/web/query-parameter-policy/policy.json +58 -0
  493. package/core/server/web/query-parameter-policy/schema.js +38 -0
  494. package/core/shared/config/defaults.json +3 -0
  495. package/core/shared/config/env/config.testing-mysql.json +4 -1
  496. package/core/shared/config/env/config.testing.json +3 -0
  497. package/core/shared/config/overrides.json +4 -2
  498. package/core/shared/labs.js +9 -15
  499. package/package.json +25 -25
  500. package/pnpm-lock.yaml +741 -108
  501. package/pnpm-workspace.yaml +12 -9
  502. package/tsconfig.json +2 -3
  503. package/components/tryghost-kg-default-nodes-2.2.0.tgz +0 -0
  504. package/core/built/admin/assets/Combination-gnJO3vIw.js +0 -41
  505. package/core/built/admin/assets/account-migration-8qTEI1i1.js +0 -1
  506. package/core/built/admin/assets/activitypub/inbox-DQ5CwLma.js +0 -1284
  507. package/core/built/admin/assets/activitypub/label-B72sfvEU.js +0 -16
  508. package/core/built/admin/assets/activitypub/layout-CXajhRsL.js +0 -1
  509. package/core/built/admin/assets/activitypub/settings-71gCm3SO.js +0 -315
  510. package/core/built/admin/assets/add-integration-modal--YpTq3c0.js +0 -1
  511. package/core/built/admin/assets/add-newsletter-modal-C8Ix2hol.js +0 -1
  512. package/core/built/admin/assets/add-recommendation-modal-CScuNFz4.js +0 -1
  513. package/core/built/admin/assets/alert-dialog-wEbVxANM.js +0 -1
  514. package/core/built/admin/assets/analytics-Cnji45H5.js +0 -1
  515. package/core/built/admin/assets/app-utils-D2Wp7ZSS.js +0 -1
  516. package/core/built/admin/assets/audience-DTLMXAFH.js +0 -1
  517. package/core/built/admin/assets/automations-BWpRCZ_f.js +0 -1
  518. package/core/built/admin/assets/bluesky-sharing-DHOpQxff.js +0 -1
  519. package/core/built/admin/assets/chart-helpers-B3OqQ6Ez.js +0 -1
  520. package/core/built/admin/assets/color-picker-Bmo1r9Fc.js +0 -3
  521. package/core/built/admin/assets/color-picker-field-DywowPhF.js +0 -1
  522. package/core/built/admin/assets/combobox-C4QCh6Yw.js +0 -1
  523. package/core/built/admin/assets/command-DcLbSifC.js +0 -1
  524. package/core/built/admin/assets/comments-Bxy_3WyE.js +0 -1
  525. package/core/built/admin/assets/confirmation-context-CLFHhyyH.js +0 -1
  526. package/core/built/admin/assets/custom-field-type-option-D0PXoSnP.js +0 -10
  527. package/core/built/admin/assets/custom-integration-modal-DCIHKN33.js +0 -1
  528. package/core/built/admin/assets/design-and-theme-modal-CZ-PkW7o.js +0 -23
  529. package/core/built/admin/assets/dialog-Db7c164G.js +0 -1
  530. package/core/built/admin/assets/dirty-confirm-dialog-CmARpZQS.js +0 -1
  531. package/core/built/admin/assets/dist-QLZuGq7o2.js +0 -1
  532. package/core/built/admin/assets/domain-D0SAtc-T.js +0 -1
  533. package/core/built/admin/assets/dropzone-CaPOeDRZ.js +0 -5
  534. package/core/built/admin/assets/edit-profile-By7v5XW5.js +0 -1
  535. package/core/built/admin/assets/editor-COXn4Atu.js +0 -8
  536. package/core/built/admin/assets/explore-BsNYrubV.js +0 -1
  537. package/core/built/admin/assets/feed-8RR1O1bK.js +0 -1
  538. package/core/built/admin/assets/filter-sources-4C0kF1NU.js +0 -1
  539. package/core/built/admin/assets/filters-CV5jCb9n.js +0 -1
  540. package/core/built/admin/assets/filters-Dmr0PoqU.js +0 -1
  541. package/core/built/admin/assets/first-promoter-modal-OCzSaL3B.js +0 -1
  542. package/core/built/admin/assets/gift-link-modal-0mzjn5oF.js +0 -1
  543. package/core/built/admin/assets/growth-55vWlGT_.js +0 -1
  544. package/core/built/admin/assets/growth-DA5AluYw.js +0 -3
  545. package/core/built/admin/assets/history-modal-G1s5hHz7.js +0 -1
  546. package/core/built/admin/assets/html-field-BegxsWpw.js +0 -1
  547. package/core/built/admin/assets/index-CDP9tIOk.js +0 -4
  548. package/core/built/admin/assets/index-Dqf2x-ry.css +0 -1
  549. package/core/built/admin/assets/index.es-BMUCj9TR.js +0 -1
  550. package/core/built/admin/assets/input-UHrKuvBT.js +0 -1
  551. package/core/built/admin/assets/invite-user-modal-BrAkxEO3.js +0 -1
  552. package/core/built/admin/assets/koenig-loader-DwVY_V-H.js +0 -1
  553. package/core/built/admin/assets/kpi-card-LERqWBoY.js +0 -1
  554. package/core/built/admin/assets/kpi-helpers-DB3ouhYF.js +0 -1
  555. package/core/built/admin/assets/kpi-tabs-BGvtMD8S.js +0 -1
  556. package/core/built/admin/assets/label-picker-BBWykUeA.js +0 -1
  557. package/core/built/admin/assets/layout-Di5K7doM.js +0 -1
  558. package/core/built/admin/assets/loading-indicator-SFTqyYVE.js +0 -1
  559. package/core/built/admin/assets/member-custom-fields-gOv6Hoh3.js +0 -1
  560. package/core/built/admin/assets/member-detail-D7mZDDp3.js +0 -1
  561. package/core/built/admin/assets/member-route-0Aa52Ntz.js +0 -1
  562. package/core/built/admin/assets/members-DvZG9t69.js +0 -2
  563. package/core/built/admin/assets/moderation-DzzPLDyl.js +0 -1
  564. package/core/built/admin/assets/navigation-modal-CI8Bx5vn.js +0 -1
  565. package/core/built/admin/assets/newsletter-Bg3cq5U-.js +0 -1
  566. package/core/built/admin/assets/newsletter-detail-modal-DQU3r4g2.js +0 -1
  567. package/core/built/admin/assets/newsletters-DMDfZbMS.js +0 -1
  568. package/core/built/admin/assets/note-i8k6pjaw.js +0 -1
  569. package/core/built/admin/assets/notifications-psA_2Ph4.js +0 -1
  570. package/core/built/admin/assets/offers-container-modal-BWfjSdyg.js +0 -1
  571. package/core/built/admin/assets/onboarding-DGQuV7Ew.js +0 -1
  572. package/core/built/admin/assets/overview-C-6xOLaf.js +0 -1
  573. package/core/built/admin/assets/overview-DaLhpRrC.js +0 -1
  574. package/core/built/admin/assets/pages-B6vr9F_D.js +0 -1
  575. package/core/built/admin/assets/popover-CFgqFDvC.js +0 -1
  576. package/core/built/admin/assets/portal-frame-DjBF-uy2.js +0 -1
  577. package/core/built/admin/assets/portal-modal-Cf0pBAk8.js +0 -1
  578. package/core/built/admin/assets/post-analytics-Buz1COoY.js +0 -1
  579. package/core/built/admin/assets/post-analytics-header-B-P0eFnT.js +0 -1
  580. package/core/built/admin/assets/posts-KY3aUhVV.js +0 -1
  581. package/core/built/admin/assets/preferences-Cq1aOiLy.js +0 -5
  582. package/core/built/admin/assets/profile-D6dHYf2o.js +0 -1
  583. package/core/built/admin/assets/select-D_RQaXgt.js +0 -1
  584. package/core/built/admin/assets/settings-B5hJKZ5C.js +0 -1
  585. package/core/built/admin/assets/settings-DIo_F-MF.js +0 -4
  586. package/core/built/admin/assets/share-modal-CLBfj377.js +0 -1
  587. package/core/built/admin/assets/shim-ClF_m5ux.js +0 -1
  588. package/core/built/admin/assets/slack-modal-Bt9I_tEo.js +0 -1
  589. package/core/built/admin/assets/sort-button-DMBXF7tP.js +0 -1
  590. package/core/built/admin/assets/stats-B_YkF7bp.js +0 -1
  591. package/core/built/admin/assets/stats-view-BOCp9RG8.js +0 -1
  592. package/core/built/admin/assets/stripe-connect-modal-BeSukI8q.js +0 -1
  593. package/core/built/admin/assets/tag-detail-2a3BfzTW.js +0 -2
  594. package/core/built/admin/assets/tags-Dp2_8UzL.js +0 -1
  595. package/core/built/admin/assets/testimonials-modal-C9nrypNo.js +0 -1
  596. package/core/built/admin/assets/tier-detail-modal-CxRwgTPR.js +0 -1
  597. package/core/built/admin/assets/use-check-theme-limit-error-C9-QhGdV.js +0 -1
  598. package/core/built/admin/assets/use-filter-params-CSpAvgD2.js +0 -1
  599. package/core/built/admin/assets/use-growth-stats-BOmoPDHJ.js +0 -1
  600. package/core/built/admin/assets/use-post-referrers-CbXLFIex.js +0 -1
  601. package/core/built/admin/assets/use-reply-chain-data-JYFKSO83.js +0 -1
  602. package/core/built/admin/assets/use-settings-navigation-BBzro2-V.js +0 -1
  603. package/core/built/admin/assets/use-tinybird-query-D2Aeoty5.js +0 -39
  604. package/core/built/admin/assets/use-tinybird-token-DBuwMmln.js +0 -1
  605. package/core/built/admin/assets/user-detail-modal-59mBJqxN.js +0 -1
  606. package/core/built/admin/assets/users-5msE1WMs.js +0 -1
  607. package/core/built/admin/assets/web-DUuX7nE2.js +0 -2
  608. package/core/built/admin/assets/web-N8ucs2aG.js +0 -1
  609. package/core/server/api/endpoints/member-custom-fields.js +0 -100
  610. package/core/server/services/jobs/worker-model-event-bridge.js +0 -149
  611. package/core/server/services/members/jobs/clean-expired-comped.js +0 -132
  612. package/core/server/services/update-check/run-update-check.js +0 -63
  613. /package/core/server/lib/{db-date.js → db-types/date.js} +0 -0
@@ -0,0 +1 @@
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 +1 @@
1
- import{o as e,r as t}from"./rolldown-runtime-DAXXjFlN.js";import{t as n}from"./react-Bb3IsNbi.js";import{t as r}from"./jsx-runtime-DX3WBWVO.js";import{f as i,p as a}from"./hooks-CuEZV2-q.js";import{t as o,xr as s}from"./button-BshWPHvn.js";import{o as c,t as l}from"./use-settings-navigation-BBzro2-V.js";import{i as u,n as d,r as f,t as p}from"./action-list-lGzZLHc8.js";import{t as ee}from"./use-host-limits-DZtR08oa.js";import{n as m}from"./confirmation-context-CLFHhyyH.js";import{n as h}from"./integrations-Bjbu86Z0.js";import{t as te}from"./api-keys-Boy5pLbD.js";import{t as ne}from"./integration-header-B4DyXV06.js";import{t as re}from"./api-keys-3-0vJC3Y.js";import{t as ie}from"./brand-icon-09YqFZjV.js";var ae=``+new URL(`zapier-logo-D8a11oW_.svg`,import.meta.url).href,g=e(n(),1),_=r(),v=(e,t)=>`${e}-${t}`,y=()=>{let[e,t]=(0,g.useState)(``),[n,r]=(0,g.useState)(!1),i=(0,g.useRef)(new Map),[a,o]=(0,g.useState)(new Set),s=t=>t.length?t.some(t=>t.toLowerCase().includes(e.toLowerCase())):!0,c=(0,g.useCallback)((t,n)=>{i.current.set(t,n),(!e||n.some(t=>t.toLowerCase().includes(e.toLowerCase())))&&o(e=>new Set(e).add(t))},[e]),l=(0,g.useCallback)(e=>{i.current.delete(e),o(t=>{let n=new Set(t);return n.delete(e),n})},[]);(0,g.useEffect)(()=>{let t=new Set;i.current.forEach((n,r)=>{(!e||n.some(t=>t.toLowerCase().includes(e.toLowerCase())))&&t.add(r)}),o(t)},[e]);let u=(0,g.useCallback)(e=>a.size===1&&a.has(e),[a]),d=(0,g.useCallback)(()=>a,[a]),f=t=>{if(!e)return t;if(typeof t==`string`){let n=e.split(/\s+/).map(e=>e.toLowerCase()),r=n.map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)).join(`|`),i=t.split(RegExp(`(${r})`,`gi`)),a=new Map;return i.map(e=>{if(!n.includes(e.toLowerCase()))return e;let t=(a.get(e)??0)+1;return a.set(e,t),(0,_.jsx)(`span`,{className:`bg-yellow-500/40`,children:e},`${e}-${t}`)})}else if(Array.isArray(t))return t.map(e=>f(e));else if(t&&typeof t==`object`&&t)return g.Children.map(t,e=>e&&typeof e==`object`&&`props`in e?f(e.props.children):e);else return t};return{filter:e,setFilter:t,checkVisible:s,highlightKeywords:f,noResult:n,setNoResult:r,registerComponent:c,unregisterComponent:l,getVisibleComponents:d,isOnlyVisibleComponent:u}},b=``+new URL(`Alto-DoS3yH_j.png`,import.meta.url).href,x=``+new URL(`Bulletin-BUpcurG5.png`,import.meta.url).href,S=``+new URL(`Casper-ASA9Ix4v.png`,import.meta.url).href,C=``+new URL(`Dawn-aeEVEPie.png`,import.meta.url).href,w=``+new URL(`Digest-DJl0U_FG.png`,import.meta.url).href,T=``+new URL(`Dope-D_CgP0p0.png`,import.meta.url).href,E=``+new URL(`Ease-B4NuA7sj.png`,import.meta.url).href,D=``+new URL(`Edge-BPZxvKka.png`,import.meta.url).href,O=``+new URL(`Edition-cIDLjlhj.png`,import.meta.url).href,k=``+new URL(`Episode-D7bgV2bY.png`,import.meta.url).href,A=``+new URL(`Headline-BFXOunIb.png`,import.meta.url).href,j=``+new URL(`Journal-D3UW9T2b.png`,import.meta.url).href,M=``+new URL(`London-CSCVHwS0.png`,import.meta.url).href,N=``+new URL(`Ruby-DVEXVMTx.png`,import.meta.url).href,P=``+new URL(`Solo-c-yPo0gw.png`,import.meta.url).href,F=``+new URL(`Source-V-WXZXnS.png`,import.meta.url).href,I=``+new URL(`Source-Magazine-Czq1p0a_.png`,import.meta.url).href,L=``+new URL(`Source-Newsletter-CwTcfhJ-.png`,import.meta.url).href,R=``+new URL(`Taste-U2cRR2yO.png`,import.meta.url).href,z=``+new URL(`Wave-DE2aI-FM.png`,import.meta.url).href,B=[{name:`Source`,category:`News`,previewUrl:`https://source.ghost.io/`,ref:`default`,image:F,variants:[{category:`Magazine`,previewUrl:`https://source-magazine.ghost.io/`,image:I},{category:`Newsletter`,previewUrl:`https://source-newsletter.ghost.io/`,image:L}]},{name:`Casper`,category:`Blog`,previewUrl:`https://demo.ghost.io/`,ref:`TryGhost/Casper`,image:S},{name:`Edition`,category:`Newsletter`,url:`https://github.com/TryGhost/Edition`,previewUrl:`https://edition.ghost.io/`,ref:`TryGhost/Edition`,image:O},{name:`Solo`,category:`Blog`,url:`https://github.com/TryGhost/Solo`,previewUrl:`https://solo.ghost.io`,ref:`TryGhost/Solo`,image:P},{name:`Taste`,category:`Blog`,url:`https://github.com/TryGhost/Taste`,previewUrl:`https://taste.ghost.io`,ref:`TryGhost/Taste`,image:R},{name:`Episode`,category:`Podcast`,url:`https://github.com/TryGhost/Episode`,previewUrl:`https://episode.ghost.io`,ref:`TryGhost/Episode`,image:k},{name:`Digest`,category:`Newsletter`,url:`https://github.com/TryGhost/Digest`,previewUrl:`https://digest.ghost.io/`,ref:`TryGhost/Digest`,image:w},{name:`Bulletin`,category:`Newsletter`,url:`https://github.com/TryGhost/Bulletin`,previewUrl:`https://bulletin.ghost.io/`,ref:`TryGhost/Bulletin`,image:x},{name:`Alto`,category:`Blog`,url:`https://github.com/TryGhost/Alto`,previewUrl:`https://alto.ghost.io`,ref:`TryGhost/Alto`,image:b},{name:`Dope`,category:`Magazine`,url:`https://github.com/TryGhost/Dope`,previewUrl:`https://dope.ghost.io`,ref:`TryGhost/Dope`,image:T},{name:`Wave`,category:`Podcast`,url:`https://github.com/TryGhost/Wave`,previewUrl:`https://wave.ghost.io`,ref:`TryGhost/Wave`,image:z},{name:`Edge`,category:`Photography`,url:`https://github.com/TryGhost/Edge`,previewUrl:`https://edge.ghost.io`,ref:`TryGhost/Edge`,image:D},{name:`Dawn`,category:`Newsletter`,url:`https://github.com/TryGhost/Dawn`,previewUrl:`https://dawn.ghost.io/`,ref:`TryGhost/Dawn`,image:C},{name:`Ease`,category:`Documentation`,url:`https://github.com/TryGhost/Ease`,previewUrl:`https://ease.ghost.io`,ref:`TryGhost/Ease`,image:E},{name:`Headline`,category:`News`,url:`https://github.com/TryGhost/Headline`,previewUrl:`https://headline.ghost.io`,ref:`TryGhost/Headline`,image:A},{name:`Ruby`,category:`Magazine`,url:`https://github.com/TryGhost/Ruby`,previewUrl:`https://ruby.ghost.io`,ref:`TryGhost/Ruby`,image:N},{name:`London`,category:`Photography`,url:`https://github.com/TryGhost/London`,previewUrl:`https://london.ghost.io`,ref:`TryGhost/London`,image:M},{name:`Journal`,category:`Newsletter`,url:`https://github.com/TryGhost/Journal`,previewUrl:`https://journal.ghost.io/`,ref:`TryGhost/Journal`,image:j}],V=``+new URL(`orb-black-1-bYPPSSAp.png`,import.meta.url).href,H=``+new URL(`orb-black-2-C-rcujeh.png`,import.meta.url).href,U=``+new URL(`orb-black-3-DTkwRv_1.png`,import.meta.url).href,W=``+new URL(`orb-black-4-BXF3fMuE.png`,import.meta.url).href,G=``+new URL(`orb-black-5-94Eda1ek.png`,import.meta.url).href,K=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201818.2%202500'%20style='enable-background:new%200%200%201818.2%202500'%20xml:space='preserve'%3e%3ctitle%3egoogle-docs%3c/title%3e%3cpath%20d='M1136.4%200h-966C79.6%200%200%2079.5%200%20170.5v2159.1c0%2090.9%2079.5%20170.5%20170.5%20170.5h1477.3c90.9%200%20170.5-79.5%20170.5-170.5V681.8l-397.7-284.1L1136.4%200z'%20style='fill:%234285f4'/%3e%3cpath%20d='M454.5%201818.2h909.1v-113.6h-909l-.1%20113.6zm0%20227.3h681.8v-113.6H454.5v113.6zm0-795.5v113.6h909.1V1250H454.5zm0%20340.9h909.1v-113.6h-909l-.1%20113.6z'%20style='fill:%23f1f1f1'/%3e%3cpath%20d='M1136.4%200v511.4c0%2090.9%2079.5%20170.4%20170.4%20170.4h511.4L1136.4%200z'%20style='fill:%23a1c2fa'/%3e%3c/svg%3e`,q=``+new URL(`mailchimp-DwTEN-tS.svg`,import.meta.url).href,J=`data:image/svg+xml,%3csvg%20height='546'%20viewBox='0%200%20569%20546'%20width='569'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3epatreon%3c/title%3e%3cg%20fill='%23FF424D'%3e%3ccircle%20cx='362.59'%20cy='204.59'%20data-fill='1'%20r='204.59'/%3e%3cpath%20data-fill='1'%20d='M0%200h100v545.8H0z'/%3e%3c/g%3e%3c/svg%3e`,Y=`data:image/svg+xml,%3csvg%20width='152'%20height='179'%20viewBox='0%200%20152%20179'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3epaypal%3c/title%3e%3cg%20fill='none'%20fill-rule='evenodd'%3e%3cpath%20d='M136.492%2045.453c2.179-13.894-.015-23.348-7.53-31.911C120.688%204.114%20105.741.075%2086.617.075H31.105a7.943%207.943%200%200%200-7.846%206.705L.144%20153.36a4.765%204.765%200%200%200%204.707%205.507h34.27l-2.365%2015a4.168%204.168%200%200%200%204.118%204.818H69.76a6.948%206.948%200%200%200%206.863-5.865l.283-1.468%205.442-34.507.351-1.907a6.947%206.947%200%200%201%206.862-5.865h4.322c27.984%200%2049.896-11.37%2056.299-44.25%202.675-13.74%201.292-25.208-5.783-33.27-2.14-2.439-4.802-4.455-7.907-6.1'%20fill='%23238EC2'/%3e%3cpath%20d='M136.492%2045.453c2.179-13.894-.015-23.348-7.53-31.911C120.688%204.114%20105.741.075%2086.617.075H31.105a7.943%207.943%200%200%200-7.846%206.705L.144%20153.36a4.765%204.765%200%200%200%204.707%205.507h34.27l8.609-54.588-.267%201.711c.609-3.86%203.909-6.704%207.817-6.704h16.288c31.989%200%2057.037-12.996%2064.356-50.582.217-1.113.402-2.191.568-3.251'%20fill='%2320274F'/%3e%3cpath%20d='M56.978%2045.638a6.945%206.945%200%200%201%206.863-5.866h43.514c5.155%200%209.961.337%2014.356%201.045%201.256.202%202.478.435%203.665.698a53.92%2053.92%200%200%201%203.455.885c.558.162%201.106.333%201.646.512%202.157.717%204.166%201.562%206.015%202.541%202.179-13.894-.015-23.348-7.53-31.911C120.688%204.114%20105.741.075%2086.617.075H31.105a7.943%207.943%200%200%200-7.846%206.705L.144%20153.36a4.765%204.765%200%200%200%204.707%205.507h34.27L56.978%2045.638'%20fill='%23253667'/%3e%3c/g%3e%3c/svg%3e`,oe=``+new URL(`slackicon-37ETtpm7.png`,import.meta.url).href,se=`data:image/svg+xml,%3csvg%20width='86'%20height='89'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3etypeform%3c/title%3e%3cg%20fill='none'%20fill-rule='evenodd'%3e%3cpath%20d='M40.28%2087.561c12.464.154%2021.16-3.994%2030.135-12.175%208.975-8.18%2014.306-16.867%2014.741-28.73.436-11.862-3.412-21.43-12.564-30.581C63.441%206.923%2051.64.9%2039.4.899%2027.158.898%2018.967%206.252%2011.385%2016.07c-7.581%209.818-9.237%2022.212-9.894%2033.921-.657%2011.71-1.15%2017.111%206.608%2024.625%207.758%207.514%2019.718%2012.791%2032.182%2012.945z'%20stroke='%23262627'/%3e%3cpath%20d='M29.136%2037.976v-4.885h25.918v4.885H44.679v27.998H39.51V37.976z'%20fill='%23262627'%20fill-rule='nonzero'/%3e%3c/g%3e%3c/svg%3e`,ce=``+new URL(`zero-bounce-lzY95s9E.png`,import.meta.url).href,X=[{ghostImage:H,appImage:oe,title:`Share scheduled posts with your team in Slack`,url:`https://zapier.com/webintent/create-zap?template=359499`},{ghostImage:U,appImage:J,title:`Connect Patreon to your Ghost membership site`,url:`https://zapier.com/webintent/create-zap?template=75801`},{ghostImage:W,appImage:ce,title:`Protect email delivery with email verification`,url:`https://zapier.com/webintent/create-zap?template=359415`},{ghostImage:G,appImage:Y,title:`Add members for successful sales in PayPal`,url:`https://zapier.com/webintent/create-zap?template=184423`},{ghostImage:U,appImage:Y,title:`Unsubscribe members who cancel a subscription in PayPal`,url:`https://zapier.com/webintent/create-zap?template=359348`},{ghostImage:V,appImage:K,title:`Send new post drafts from Google Docs to Ghost`,url:`https://zapier.com/webintent/create-zap?template=50924`},{ghostImage:W,appImage:se,title:`Survey new members using Typeform`,url:`https://zapier.com/webintent/create-zap?template=359407`},{ghostImage:V,appImage:q,title:`Sync email subscribers in Ghost + Mailchimp`,url:`https://zapier.com/webintent/create-zap?template=359342`}],Z=(0,g.createContext)({officialThemes:B,zapierTemplates:X,search:{filter:``,setFilter:()=>{},checkVisible:()=>!0,highlightKeywords:()=>``,noResult:!1,setNoResult:()=>{},registerComponent:()=>{},unregisterComponent:()=>{},getVisibleComponents:()=>new Set,isOnlyVisibleComponent:()=>!1},sortingState:[],offersShowArchived:!1,setOffersShowArchived:()=>{}}),Q=()=>(0,g.useContext)(Z),le=()=>Q().officialThemes,$=()=>Q().search,ue=()=>Q().upgradeStatus,de=()=>{let{sortingState:e,setSortingState:t}=Q();return{sortingState:e,setSortingState:t}},fe=()=>{let{offersShowArchived:e,setOffersShowArchived:t}=Q();return{offersShowArchived:e,setOffersShowArchived:t}},pe=t({default:()=>me});function me(){let{updateRoute:e}=l(),{zapierTemplates:t}=Q(),{data:{integrations:n}={integrations:[]}}=h(),{mutateAsync:r}=re(),v=a(),{confirm:y}=m(),[b,x]=(0,g.useState)(!1),S=ee()?.customIntegrations?.disabled,C=n.find(({slug:e})=>e===`zapier`),w=C?.api_keys?.find(e=>e.type===`admin`);return(0,g.useEffect)(()=>{S&&e(`integrations`)},[S,e]),(0,_.jsxs)(c,{cancelLabel:``,footer:(0,_.jsxs)(`div`,{className:`mx-8 flex w-full items-center justify-between`,children:[(0,_.jsxs)(`a`,{className:`mt-1 self-baseline font-bold`,href:`https://zapier.com/apps/ghost/integrations?utm_medium=partner_api&utm_source=widget&utm_campaign=Widget`,rel:`noopener noreferrer`,target:`_blank`,children:[`View more Ghost integrations powered by`,` `,(0,_.jsx)(`span`,{children:(0,_.jsx)(`img`,{alt:`Zapier`,className:`relative top-[-2px] inline-block`,src:ae})})]}),(0,_.jsx)(o,{type:`button`,onClick:()=>{e(`integrations`)},children:`Close`})]}),okLabel:`Close`,okVariant:`default`,testId:`zapier-modal`,title:``,stickyFooter:!0,onClose:()=>{e(`integrations`)},onOk:()=>{e(`integrations`)},children:[(0,_.jsx)(ne,{detail:`Automation for your favorite apps`,extra:(0,_.jsx)(`div`,{className:`mt-1 -mb-4`,children:(0,_.jsx)(te,{keys:[{id:`admin-api-key`,label:`Admin API key`,text:w?.secret,hint:b?(0,_.jsx)(`div`,{className:`text-green`,children:`Admin API Key was successfully regenerated`}):void 0,onRegenerate:()=>{!C||!w||(x(!1),y({title:`Regenerate Admin API Key`,prompt:`You will need to locate the Ghost App within your Zapier account and click on "Reconnect" to enter the new Admin API Key.`,okLabel:`Regenerate Admin API Key`,onOk:async e=>{try{await r({integrationId:C.id,apiKeyId:w.id}),x(!0),e?.remove()}catch(e){v(e)}}}))}},{id:`api-url`,label:`API URL`,text:window.location.origin+i().subdir}]})}),icon:(0,_.jsx)(ie,{name:`zapier`,size:56}),title:`Zapier`}),(0,_.jsx)(p,{children:t.map(e=>(0,_.jsxs)(d,{hover:!1,children:[(0,_.jsx)(u,{className:`flex items-center gap-3 py-2 pl-3`,children:(0,_.jsxs)(`div`,{className:`flex flex-col gap-4 md:flex-row md:items-center`,children:[(0,_.jsxs)(`div`,{className:`flex shrink-0 flex-nowrap items-center gap-2`,children:[(0,_.jsx)(`img`,{className:`size-8 object-contain dark:invert`,role:`presentation`,src:e.ghostImage}),(0,_.jsx)(s,{className:`size-3`}),(0,_.jsx)(`img`,{className:`size-8 object-contain`,role:`presentation`,src:e.appImage})]}),(0,_.jsx)(`span`,{children:e.title})]})}),(0,_.jsx)(f,{visibility:`hover`,children:(0,_.jsx)(o,{className:`h-auto p-0 font-semibold whitespace-nowrap text-[#FF4A00] hover:text-[#FF4A00]`,variant:`link`,asChild:!0,children:(0,_.jsx)(`a`,{href:e.url,rel:`noopener noreferrer`,target:`_blank`,children:`Use this Zap`})})})]},e.url))})]})}export{$ as a,X as c,y as d,le as i,B as l,Z as n,de as o,fe as r,ue as s,pe as t,v as u};
1
+ import{o as e,r as t}from"./rolldown-runtime-DAXXjFlN.js";import{t as n}from"./react-Bb3IsNbi.js";import{t as r}from"./jsx-runtime-DX3WBWVO.js";import{f as i,p as a}from"./hooks-CuEZV2-q.js";import{Tr as o,t as s}from"./button-eNMKQWXr.js";import{o as c,t as l}from"./use-settings-navigation-CZjGrhsp.js";import{i as u,n as d,r as f,t as p}from"./action-list-C4v0-du8.js";import{t as ee}from"./use-host-limits-DZtR08oa.js";import{n as m}from"./confirmation-context-CBM8G0Vj.js";import{n as h}from"./integrations-Bjbu86Z0.js";import{t as te}from"./api-keys-Ck-Yteiv.js";import{t as ne}from"./integration-header-Bm6IDb1A.js";import{t as re}from"./api-keys-3-0vJC3Y.js";import{t as ie}from"./brand-icon-CrIGOA3Z.js";var ae=``+new URL(`zapier-logo-D8a11oW_.svg`,import.meta.url).href,g=e(n(),1),_=r(),v=(e,t)=>`${e}-${t}`,y=()=>{let[e,t]=(0,g.useState)(``),[n,r]=(0,g.useState)(!1),i=(0,g.useRef)(new Map),[a,o]=(0,g.useState)(new Set),s=t=>t.length?t.some(t=>t.toLowerCase().includes(e.toLowerCase())):!0,c=(0,g.useCallback)((t,n)=>{i.current.set(t,n),(!e||n.some(t=>t.toLowerCase().includes(e.toLowerCase())))&&o(e=>new Set(e).add(t))},[e]),l=(0,g.useCallback)(e=>{i.current.delete(e),o(t=>{let n=new Set(t);return n.delete(e),n})},[]);(0,g.useEffect)(()=>{let t=new Set;i.current.forEach((n,r)=>{(!e||n.some(t=>t.toLowerCase().includes(e.toLowerCase())))&&t.add(r)}),o(t)},[e]);let u=(0,g.useCallback)(e=>a.size===1&&a.has(e),[a]),d=(0,g.useCallback)(()=>a,[a]),f=t=>{if(!e)return t;if(typeof t==`string`){let n=e.split(/\s+/).map(e=>e.toLowerCase()),r=n.map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)).join(`|`),i=t.split(RegExp(`(${r})`,`gi`)),a=new Map;return i.map(e=>{if(!n.includes(e.toLowerCase()))return e;let t=(a.get(e)??0)+1;return a.set(e,t),(0,_.jsx)(`span`,{className:`bg-yellow-500/40`,children:e},`${e}-${t}`)})}else if(Array.isArray(t))return t.map(e=>f(e));else if(t&&typeof t==`object`&&t)return g.Children.map(t,e=>e&&typeof e==`object`&&`props`in e?f(e.props.children):e);else return t};return{filter:e,setFilter:t,checkVisible:s,highlightKeywords:f,noResult:n,setNoResult:r,registerComponent:c,unregisterComponent:l,getVisibleComponents:d,isOnlyVisibleComponent:u}},b=``+new URL(`Alto-DoS3yH_j.png`,import.meta.url).href,x=``+new URL(`Bulletin-BUpcurG5.png`,import.meta.url).href,S=``+new URL(`Casper-ASA9Ix4v.png`,import.meta.url).href,C=``+new URL(`Dawn-aeEVEPie.png`,import.meta.url).href,w=``+new URL(`Digest-DJl0U_FG.png`,import.meta.url).href,T=``+new URL(`Dope-D_CgP0p0.png`,import.meta.url).href,E=``+new URL(`Ease-B4NuA7sj.png`,import.meta.url).href,D=``+new URL(`Edge-BPZxvKka.png`,import.meta.url).href,O=``+new URL(`Edition-cIDLjlhj.png`,import.meta.url).href,k=``+new URL(`Episode-D7bgV2bY.png`,import.meta.url).href,A=``+new URL(`Headline-BFXOunIb.png`,import.meta.url).href,j=``+new URL(`Journal-D3UW9T2b.png`,import.meta.url).href,M=``+new URL(`London-CSCVHwS0.png`,import.meta.url).href,N=``+new URL(`Ruby-DVEXVMTx.png`,import.meta.url).href,P=``+new URL(`Solo-c-yPo0gw.png`,import.meta.url).href,F=``+new URL(`Source-V-WXZXnS.png`,import.meta.url).href,I=``+new URL(`Source-Magazine-Czq1p0a_.png`,import.meta.url).href,L=``+new URL(`Source-Newsletter-CwTcfhJ-.png`,import.meta.url).href,R=``+new URL(`Taste-U2cRR2yO.png`,import.meta.url).href,z=``+new URL(`Wave-DE2aI-FM.png`,import.meta.url).href,B=[{name:`Source`,category:`News`,previewUrl:`https://source.ghost.io/`,ref:`default`,image:F,variants:[{category:`Magazine`,previewUrl:`https://source-magazine.ghost.io/`,image:I},{category:`Newsletter`,previewUrl:`https://source-newsletter.ghost.io/`,image:L}]},{name:`Casper`,category:`Blog`,previewUrl:`https://demo.ghost.io/`,ref:`TryGhost/Casper`,image:S},{name:`Edition`,category:`Newsletter`,url:`https://github.com/TryGhost/Edition`,previewUrl:`https://edition.ghost.io/`,ref:`TryGhost/Edition`,image:O},{name:`Solo`,category:`Blog`,url:`https://github.com/TryGhost/Solo`,previewUrl:`https://solo.ghost.io`,ref:`TryGhost/Solo`,image:P},{name:`Taste`,category:`Blog`,url:`https://github.com/TryGhost/Taste`,previewUrl:`https://taste.ghost.io`,ref:`TryGhost/Taste`,image:R},{name:`Episode`,category:`Podcast`,url:`https://github.com/TryGhost/Episode`,previewUrl:`https://episode.ghost.io`,ref:`TryGhost/Episode`,image:k},{name:`Digest`,category:`Newsletter`,url:`https://github.com/TryGhost/Digest`,previewUrl:`https://digest.ghost.io/`,ref:`TryGhost/Digest`,image:w},{name:`Bulletin`,category:`Newsletter`,url:`https://github.com/TryGhost/Bulletin`,previewUrl:`https://bulletin.ghost.io/`,ref:`TryGhost/Bulletin`,image:x},{name:`Alto`,category:`Blog`,url:`https://github.com/TryGhost/Alto`,previewUrl:`https://alto.ghost.io`,ref:`TryGhost/Alto`,image:b},{name:`Dope`,category:`Magazine`,url:`https://github.com/TryGhost/Dope`,previewUrl:`https://dope.ghost.io`,ref:`TryGhost/Dope`,image:T},{name:`Wave`,category:`Podcast`,url:`https://github.com/TryGhost/Wave`,previewUrl:`https://wave.ghost.io`,ref:`TryGhost/Wave`,image:z},{name:`Edge`,category:`Photography`,url:`https://github.com/TryGhost/Edge`,previewUrl:`https://edge.ghost.io`,ref:`TryGhost/Edge`,image:D},{name:`Dawn`,category:`Newsletter`,url:`https://github.com/TryGhost/Dawn`,previewUrl:`https://dawn.ghost.io/`,ref:`TryGhost/Dawn`,image:C},{name:`Ease`,category:`Documentation`,url:`https://github.com/TryGhost/Ease`,previewUrl:`https://ease.ghost.io`,ref:`TryGhost/Ease`,image:E},{name:`Headline`,category:`News`,url:`https://github.com/TryGhost/Headline`,previewUrl:`https://headline.ghost.io`,ref:`TryGhost/Headline`,image:A},{name:`Ruby`,category:`Magazine`,url:`https://github.com/TryGhost/Ruby`,previewUrl:`https://ruby.ghost.io`,ref:`TryGhost/Ruby`,image:N},{name:`London`,category:`Photography`,url:`https://github.com/TryGhost/London`,previewUrl:`https://london.ghost.io`,ref:`TryGhost/London`,image:M},{name:`Journal`,category:`Newsletter`,url:`https://github.com/TryGhost/Journal`,previewUrl:`https://journal.ghost.io/`,ref:`TryGhost/Journal`,image:j}],V=``+new URL(`orb-black-1-bYPPSSAp.png`,import.meta.url).href,H=``+new URL(`orb-black-2-C-rcujeh.png`,import.meta.url).href,U=``+new URL(`orb-black-3-DTkwRv_1.png`,import.meta.url).href,W=``+new URL(`orb-black-4-BXF3fMuE.png`,import.meta.url).href,G=``+new URL(`orb-black-5-94Eda1ek.png`,import.meta.url).href,K=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201818.2%202500'%20style='enable-background:new%200%200%201818.2%202500'%20xml:space='preserve'%3e%3ctitle%3egoogle-docs%3c/title%3e%3cpath%20d='M1136.4%200h-966C79.6%200%200%2079.5%200%20170.5v2159.1c0%2090.9%2079.5%20170.5%20170.5%20170.5h1477.3c90.9%200%20170.5-79.5%20170.5-170.5V681.8l-397.7-284.1L1136.4%200z'%20style='fill:%234285f4'/%3e%3cpath%20d='M454.5%201818.2h909.1v-113.6h-909l-.1%20113.6zm0%20227.3h681.8v-113.6H454.5v113.6zm0-795.5v113.6h909.1V1250H454.5zm0%20340.9h909.1v-113.6h-909l-.1%20113.6z'%20style='fill:%23f1f1f1'/%3e%3cpath%20d='M1136.4%200v511.4c0%2090.9%2079.5%20170.4%20170.4%20170.4h511.4L1136.4%200z'%20style='fill:%23a1c2fa'/%3e%3c/svg%3e`,q=``+new URL(`mailchimp-DwTEN-tS.svg`,import.meta.url).href,J=`data:image/svg+xml,%3csvg%20height='546'%20viewBox='0%200%20569%20546'%20width='569'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3epatreon%3c/title%3e%3cg%20fill='%23FF424D'%3e%3ccircle%20cx='362.59'%20cy='204.59'%20data-fill='1'%20r='204.59'/%3e%3cpath%20data-fill='1'%20d='M0%200h100v545.8H0z'/%3e%3c/g%3e%3c/svg%3e`,Y=`data:image/svg+xml,%3csvg%20width='152'%20height='179'%20viewBox='0%200%20152%20179'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3epaypal%3c/title%3e%3cg%20fill='none'%20fill-rule='evenodd'%3e%3cpath%20d='M136.492%2045.453c2.179-13.894-.015-23.348-7.53-31.911C120.688%204.114%20105.741.075%2086.617.075H31.105a7.943%207.943%200%200%200-7.846%206.705L.144%20153.36a4.765%204.765%200%200%200%204.707%205.507h34.27l-2.365%2015a4.168%204.168%200%200%200%204.118%204.818H69.76a6.948%206.948%200%200%200%206.863-5.865l.283-1.468%205.442-34.507.351-1.907a6.947%206.947%200%200%201%206.862-5.865h4.322c27.984%200%2049.896-11.37%2056.299-44.25%202.675-13.74%201.292-25.208-5.783-33.27-2.14-2.439-4.802-4.455-7.907-6.1'%20fill='%23238EC2'/%3e%3cpath%20d='M136.492%2045.453c2.179-13.894-.015-23.348-7.53-31.911C120.688%204.114%20105.741.075%2086.617.075H31.105a7.943%207.943%200%200%200-7.846%206.705L.144%20153.36a4.765%204.765%200%200%200%204.707%205.507h34.27l8.609-54.588-.267%201.711c.609-3.86%203.909-6.704%207.817-6.704h16.288c31.989%200%2057.037-12.996%2064.356-50.582.217-1.113.402-2.191.568-3.251'%20fill='%2320274F'/%3e%3cpath%20d='M56.978%2045.638a6.945%206.945%200%200%201%206.863-5.866h43.514c5.155%200%209.961.337%2014.356%201.045%201.256.202%202.478.435%203.665.698a53.92%2053.92%200%200%201%203.455.885c.558.162%201.106.333%201.646.512%202.157.717%204.166%201.562%206.015%202.541%202.179-13.894-.015-23.348-7.53-31.911C120.688%204.114%20105.741.075%2086.617.075H31.105a7.943%207.943%200%200%200-7.846%206.705L.144%20153.36a4.765%204.765%200%200%200%204.707%205.507h34.27L56.978%2045.638'%20fill='%23253667'/%3e%3c/g%3e%3c/svg%3e`,oe=``+new URL(`slackicon-37ETtpm7.png`,import.meta.url).href,se=`data:image/svg+xml,%3csvg%20width='86'%20height='89'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3etypeform%3c/title%3e%3cg%20fill='none'%20fill-rule='evenodd'%3e%3cpath%20d='M40.28%2087.561c12.464.154%2021.16-3.994%2030.135-12.175%208.975-8.18%2014.306-16.867%2014.741-28.73.436-11.862-3.412-21.43-12.564-30.581C63.441%206.923%2051.64.9%2039.4.899%2027.158.898%2018.967%206.252%2011.385%2016.07c-7.581%209.818-9.237%2022.212-9.894%2033.921-.657%2011.71-1.15%2017.111%206.608%2024.625%207.758%207.514%2019.718%2012.791%2032.182%2012.945z'%20stroke='%23262627'/%3e%3cpath%20d='M29.136%2037.976v-4.885h25.918v4.885H44.679v27.998H39.51V37.976z'%20fill='%23262627'%20fill-rule='nonzero'/%3e%3c/g%3e%3c/svg%3e`,ce=``+new URL(`zero-bounce-lzY95s9E.png`,import.meta.url).href,X=[{ghostImage:H,appImage:oe,title:`Share scheduled posts with your team in Slack`,url:`https://zapier.com/webintent/create-zap?template=359499`},{ghostImage:U,appImage:J,title:`Connect Patreon to your Ghost membership site`,url:`https://zapier.com/webintent/create-zap?template=75801`},{ghostImage:W,appImage:ce,title:`Protect email delivery with email verification`,url:`https://zapier.com/webintent/create-zap?template=359415`},{ghostImage:G,appImage:Y,title:`Add members for successful sales in PayPal`,url:`https://zapier.com/webintent/create-zap?template=184423`},{ghostImage:U,appImage:Y,title:`Unsubscribe members who cancel a subscription in PayPal`,url:`https://zapier.com/webintent/create-zap?template=359348`},{ghostImage:V,appImage:K,title:`Send new post drafts from Google Docs to Ghost`,url:`https://zapier.com/webintent/create-zap?template=50924`},{ghostImage:W,appImage:se,title:`Survey new members using Typeform`,url:`https://zapier.com/webintent/create-zap?template=359407`},{ghostImage:V,appImage:q,title:`Sync email subscribers in Ghost + Mailchimp`,url:`https://zapier.com/webintent/create-zap?template=359342`}],Z=(0,g.createContext)({officialThemes:B,zapierTemplates:X,search:{filter:``,setFilter:()=>{},checkVisible:()=>!0,highlightKeywords:()=>``,noResult:!1,setNoResult:()=>{},registerComponent:()=>{},unregisterComponent:()=>{},getVisibleComponents:()=>new Set,isOnlyVisibleComponent:()=>!1},sortingState:[],offersShowArchived:!1,setOffersShowArchived:()=>{}}),Q=()=>(0,g.useContext)(Z),le=()=>Q().officialThemes,$=()=>Q().search,ue=()=>Q().upgradeStatus,de=()=>{let{sortingState:e,setSortingState:t}=Q();return{sortingState:e,setSortingState:t}},fe=()=>{let{offersShowArchived:e,setOffersShowArchived:t}=Q();return{offersShowArchived:e,setOffersShowArchived:t}},pe=t({default:()=>me});function me(){let{updateRoute:e}=l(),{zapierTemplates:t}=Q(),{data:{integrations:n}={integrations:[]}}=h(),{mutateAsync:r}=re(),v=a(),{confirm:y}=m(),[b,x]=(0,g.useState)(!1),S=ee()?.customIntegrations?.disabled,C=n.find(({slug:e})=>e===`zapier`),w=C?.api_keys?.find(e=>e.type===`admin`);return(0,g.useEffect)(()=>{S&&e(`integrations`)},[S,e]),(0,_.jsxs)(c,{cancelLabel:``,footer:(0,_.jsxs)(`div`,{className:`mx-8 flex w-full items-center justify-between`,children:[(0,_.jsxs)(`a`,{className:`mt-1 self-baseline font-bold`,href:`https://zapier.com/apps/ghost/integrations?utm_medium=partner_api&utm_source=widget&utm_campaign=Widget`,rel:`noopener noreferrer`,target:`_blank`,children:[`View more Ghost integrations powered by`,` `,(0,_.jsx)(`span`,{children:(0,_.jsx)(`img`,{alt:`Zapier`,className:`relative top-[-2px] inline-block`,src:ae})})]}),(0,_.jsx)(s,{type:`button`,onClick:()=>{e(`integrations`)},children:`Close`})]}),okLabel:`Close`,okVariant:`default`,testId:`zapier-modal`,title:``,stickyFooter:!0,onClose:()=>{e(`integrations`)},onOk:()=>{e(`integrations`)},children:[(0,_.jsx)(ne,{detail:`Automation for your favorite apps`,extra:(0,_.jsx)(`div`,{className:`mt-1 -mb-4`,children:(0,_.jsx)(te,{keys:[{id:`admin-api-key`,label:`Admin API key`,text:w?.secret,hint:b?(0,_.jsx)(`div`,{className:`text-green`,children:`Admin API Key was successfully regenerated`}):void 0,onRegenerate:()=>{!C||!w||(x(!1),y({title:`Regenerate Admin API Key`,prompt:`You will need to locate the Ghost App within your Zapier account and click on "Reconnect" to enter the new Admin API Key.`,okLabel:`Regenerate Admin API Key`,onOk:async e=>{try{await r({integrationId:C.id,apiKeyId:w.id}),x(!0),e?.remove()}catch(e){v(e)}}}))}},{id:`api-url`,label:`API URL`,text:window.location.origin+i().subdir}]})}),icon:(0,_.jsx)(ie,{name:`zapier`,size:56}),title:`Zapier`}),(0,_.jsx)(p,{children:t.map(e=>(0,_.jsxs)(d,{hover:!1,children:[(0,_.jsx)(u,{className:`flex items-center gap-3 py-2 pl-3`,children:(0,_.jsxs)(`div`,{className:`flex flex-col gap-4 md:flex-row md:items-center`,children:[(0,_.jsxs)(`div`,{className:`flex shrink-0 flex-nowrap items-center gap-2`,children:[(0,_.jsx)(`img`,{className:`size-8 object-contain dark:invert`,role:`presentation`,src:e.ghostImage}),(0,_.jsx)(o,{className:`size-3`}),(0,_.jsx)(`img`,{className:`size-8 object-contain`,role:`presentation`,src:e.appImage})]}),(0,_.jsx)(`span`,{children:e.title})]})}),(0,_.jsx)(f,{visibility:`hover`,children:(0,_.jsx)(s,{className:`h-auto p-0 font-semibold whitespace-nowrap text-[#FF4A00] hover:text-[#FF4A00]`,variant:`link`,asChild:!0,children:(0,_.jsx)(`a`,{href:e.url,rel:`noopener noreferrer`,target:`_blank`,children:`Use this Zap`})})})]},e.url))})]})}export{$ as a,X as c,y as d,le as i,B as l,Z as n,de as o,fe as r,ue as s,pe as t,v as u};
@@ -2,8 +2,8 @@
2
2
  <html lang="en">
3
3
  <head>
4
4
  <link rel="stylesheet" href="./assets/vendor-3bf602dfa6463c3400ffd81697767274.css">
5
- <link rel="stylesheet" href="./assets/ghost-c8807202a07c20030acb719ee0114815.css">
6
- <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22editorUrl%22%3A%22%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%226.60%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%2C%22editorFilename%22%3A%22koenig-lexical.umd.js%22%2C%22editorHash%22%3A%222d2f1e9a26%22%2C%22activitypubFilename%22%3A%22activitypub.js%22%2C%22activitypubHash%22%3A%22a46e4999b1%22%2C%22activitypubRemoteConfigUrl%22%3A%22%2F.ghost%2Factivitypub%2Fstable%2Fclient-config%22%7D">
5
+ <link rel="stylesheet" href="./assets/ghost-8eabfc1ece81b03cf7b90780d31487e8.css">
6
+ <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22editorUrl%22%3A%22%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%226.62%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%2C%22editorFilename%22%3A%22koenig-lexical.umd.js%22%2C%22editorHash%22%3A%227ebc9689e6%22%2C%22activitypubFilename%22%3A%22activitypub.js%22%2C%22activitypubHash%22%3A%229eeadded9c%22%2C%22activitypubRemoteConfigUrl%22%3A%22%2F.ghost%2Factivitypub%2Fstable%2Fclient-config%22%7D">
7
7
 
8
8
  <meta charset="UTF-8" />
9
9
 
@@ -20,43 +20,37 @@
20
20
 
21
21
  <link rel="shortcut icon" href="./assets/favicon-C_q1KHzv.ico" />
22
22
  <link rel="apple-touch-icon" href="./assets/apple-touch-icon-DhO18_4B.png" />
23
- <script type="module" crossorigin src="./assets/index-CDP9tIOk.js"></script>
23
+ <script type="module" crossorigin src="./assets/index-6MkPdCtr.js"></script>
24
24
  <link rel="modulepreload" crossorigin href="./assets/rolldown-runtime-DAXXjFlN.js">
25
25
  <link rel="modulepreload" crossorigin href="./assets/react-Bb3IsNbi.js">
26
26
  <link rel="modulepreload" crossorigin href="./assets/jsx-runtime-DX3WBWVO.js">
27
27
  <link rel="modulepreload" crossorigin href="./assets/framework-provider-DqI25epG.js">
28
28
  <link rel="modulepreload" crossorigin href="./assets/dist-Ndy-PuGN.js">
29
29
  <link rel="modulepreload" crossorigin href="./assets/hooks-CuEZV2-q.js">
30
- <link rel="modulepreload" crossorigin href="./assets/dist-Cb5RSHSg.js">
31
- <link rel="modulepreload" crossorigin href="./assets/dist-DzcfoDJ3.js">
32
- <link rel="modulepreload" crossorigin href="./assets/Combination-gnJO3vIw.js">
33
30
  <link rel="modulepreload" crossorigin href="./assets/config-DOMQDZGZ.js">
34
31
  <link rel="modulepreload" crossorigin href="./assets/preload-helper-DYl5dUZ5.js">
35
32
  <link rel="modulepreload" crossorigin href="./assets/chunk-KS7C4IRE-DCsL4i4D.js">
36
- <link rel="modulepreload" crossorigin href="./assets/router-provider-CJC58zTy.js">
37
- <link rel="modulepreload" crossorigin href="./assets/text-DU9Hv33_.js">
38
- <link rel="modulepreload" crossorigin href="./assets/heading-CRZZ2FUe.js">
33
+ <link rel="modulepreload" crossorigin href="./assets/dist-B3keLvjj.js">
34
+ <link rel="modulepreload" crossorigin href="./assets/router-provider-B0gZyiGJ.js">
35
+ <link rel="modulepreload" crossorigin href="./assets/text-BQDSDsKs.js">
36
+ <link rel="modulepreload" crossorigin href="./assets/heading-Dh5SFVjL.js">
39
37
  <link rel="modulepreload" crossorigin href="./assets/lazy-component-COKiVB72.js">
40
- <link rel="modulepreload" crossorigin href="./assets/app-utils-D2Wp7ZSS.js">
41
- <link rel="modulepreload" crossorigin href="./assets/shade-app-F7WxOyfk-nufqw1hd.js">
38
+ <link rel="modulepreload" crossorigin href="./assets/dist-8YJUlf3B.js">
39
+ <link rel="modulepreload" crossorigin href="./assets/shade-app-CcS3f8MZ-vwURazk8.js">
42
40
  <link rel="modulepreload" crossorigin href="./assets/overlay-escape-C7XYQuvP.js">
43
- <link rel="modulepreload" crossorigin href="./assets/button-BshWPHvn.js">
44
- <link rel="modulepreload" crossorigin href="./assets/dist-BT_Z-eCn.js">
45
- <link rel="modulepreload" crossorigin href="./assets/dist-QLZuGq7o2.js">
46
- <link rel="modulepreload" crossorigin href="./assets/dialog-Db7c164G.js">
47
- <link rel="modulepreload" crossorigin href="./assets/popover-CFgqFDvC.js">
48
- <link rel="modulepreload" crossorigin href="./assets/alert-dialog-wEbVxANM.js">
49
- <link rel="modulepreload" crossorigin href="./assets/input-surface-BdOe4KzO.js">
50
- <link rel="modulepreload" crossorigin href="./assets/input-UHrKuvBT.js">
51
- <link rel="modulepreload" crossorigin href="./assets/skeleton-D7hwjdry.js">
52
- <link rel="modulepreload" crossorigin href="./assets/loading-indicator-SFTqyYVE.js">
41
+ <link rel="modulepreload" crossorigin href="./assets/button-eNMKQWXr.js">
42
+ <link rel="modulepreload" crossorigin href="./assets/dist-Dgt2cr6a.js">
43
+ <link rel="modulepreload" crossorigin href="./assets/Combination-B0l4MKVh.js">
44
+ <link rel="modulepreload" crossorigin href="./assets/dist-Dcsslyo72.js">
45
+ <link rel="modulepreload" crossorigin href="./assets/input-surface-BsrIZeSF.js">
46
+ <link rel="modulepreload" crossorigin href="./assets/skeleton-Ce9GgUpf.js">
47
+ <link rel="modulepreload" crossorigin href="./assets/use-navigate-with-base-path-BHPA228f.js">
53
48
  <link rel="modulepreload" crossorigin href="./assets/update-queries-C4CnvJaW.js">
54
- <link rel="modulepreload" crossorigin href="./assets/users-5msE1WMs.js">
55
- <link rel="modulepreload" crossorigin href="./assets/schemas-CRsC53ls.js">
56
- <link rel="modulepreload" crossorigin href="./assets/use-navigate-with-base-path-CK989MlC.js">
57
- <link rel="modulepreload" crossorigin href="./assets/onboarding-B4YhlZ0i.js">
58
- <link rel="modulepreload" crossorigin href="./assets/onboarding-DGQuV7Ew.js">
59
- <link rel="stylesheet" crossorigin href="./assets/index-Dqf2x-ry.css">
49
+ <link rel="modulepreload" crossorigin href="./assets/users-Cg-OeGzC.js">
50
+ <link rel="modulepreload" crossorigin href="./assets/onboarding-CzIsre-d.js">
51
+ <link rel="modulepreload" crossorigin href="./assets/onboarding-qg8Akovm.js">
52
+ <link rel="modulepreload" crossorigin href="./assets/schemas-DppqmpeJ.js">
53
+ <link rel="stylesheet" crossorigin href="./assets/index-Bn7QhcZu.css">
60
54
  </head>
61
55
  <body class="react-admin">
62
56
  <div id="ember-alerts-wormhole"></div>
@@ -77,8 +71,8 @@
77
71
  <div id="ember-notifications-wormhole"></div>
78
72
  <script src="./assets/vendor-5753232c7d6ffb3c44e1eb0a02133953.js"></script>
79
73
  <script src="./assets/chunk.492.f24d855d7e3f3aad261c.js"></script>
80
- <script src="./assets/chunk.16.f76a6314082d813d67e0.js"></script>
81
- <script src="./assets/chunk.524.91ecb33e6afc3bd8949b.js"></script>
82
- <script src="./assets/ghost-403cb39badad3df411fc0ba27d220047.js"></script>
74
+ <script src="./assets/chunk.598.7e056fabb47ce7dbd73f.js"></script>
75
+ <script src="./assets/chunk.524.a697dee88db67fdf6021.js"></script>
76
+ <script src="./assets/ghost-c2848508292937415f20f5a830eea59e.js"></script>
83
77
  </body>
84
78
  </html>
@@ -41,6 +41,19 @@
41
41
  </script>
42
42
  </head>
43
43
  <body{{#if @site.accent_color}} style="--gh-private-accent-color: {{@site.accent_color}}; --gh-private-accent-color-rgba: {{color_to_rgba @site.accent_color 0.25}}; --gh-private-accent-contrast-color: {{contrast_text_color @site.accent_color}};"{{/if}}>
44
+ {{#*inline "private-access-form"}}
45
+ <form class="gh-signin gh-private-signin gh-private-access-form" method="post" novalidate="novalidate">
46
+ <div class="gh-private-signup-fields">
47
+ <div class="form-group gh-private-access-input-wrap{{#if error}} error{{/if}}">
48
+ {{input_password class="gh-input gh-private-signup-input" placeholder=(t "Access code") data-1p-ignore="true"}}
49
+ {{#if error}}
50
+ <p class="main-error">{{error.message}}</p>
51
+ {{/if}}
52
+ </div>
53
+ <button class="gh-btn gh-private-signup-btn" type="submit"><span>{{t "Enter"}} &rarr;</span></button>
54
+ </div>
55
+ </form>
56
+ {{/inline}}
44
57
  <div class="gh-app">
45
58
  <div class="gh-viewport">
46
59
  <main class="gh-main" role="main">
@@ -56,42 +69,37 @@
56
69
  <p class="gh-private-description">{{@site.description}}</p>
57
70
  {{/if}}
58
71
  {{#if @site.allow_self_signup}}
59
- <form class="gh-private-signup-form gh-signin" data-ghost-private-subscribe-form data-members-form="subscribe" data-site-url="{{@site.url}}" data-state="idle" novalidate="novalidate">
60
- <div class="gh-private-signup-fields">
61
- <input class="gh-input gh-private-signup-input" type="email" placeholder="{{t "Your email address"}}" aria-label="{{t "Your email address"}}" autocomplete="email" required data-members-email>
62
- <button class="gh-btn gh-private-signup-btn" type="submit">
63
- <span class="gh-private-signup-btn-content">
64
- <b class="gh-private-signup-btn-label">{{t "Subscribe"}}</b>
65
- <svg class="gh-private-signup-btn-loading" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
66
- <circle cx="4" cy="12" r="3"></circle>
67
- <circle cx="12" cy="12" r="3"></circle>
68
- <circle cx="20" cy="12" r="3"></circle>
69
- </svg>
70
- <svg class="gh-private-signup-btn-success" viewBox="0 0 15 14" aria-hidden="true" focusable="false">
71
- <path d="M1 6.89286L6.10714 12L13.9643 1" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
72
- </svg>
73
- </span>
74
- </button>
75
- </div>
76
- <p class="gh-private-signup-feedback" data-ghost-private-subscribe-feedback data-state="idle" aria-live="polite"></p>
77
- </form>
72
+ {{#if @member}}
73
+ {{> private-access-form}}
74
+ {{else}}
75
+ <form class="gh-private-signup-form gh-signin" data-ghost-private-subscribe-form data-members-form="subscribe" data-site-url="{{@site.url}}" data-state="idle" novalidate="novalidate">
76
+ <div class="gh-private-signup-fields">
77
+ <input class="gh-input gh-private-signup-input" type="email" placeholder="{{t "Your email address"}}" aria-label="{{t "Your email address"}}" autocomplete="email" required data-members-email>
78
+ <button class="gh-btn gh-private-signup-btn" type="submit">
79
+ <span class="gh-private-signup-btn-content">
80
+ <b class="gh-private-signup-btn-label">{{t "Subscribe"}}</b>
81
+ <svg class="gh-private-signup-btn-loading" viewBox="0 0 24 24" aria-hidden="true" focusable="false">
82
+ <circle cx="4" cy="12" r="3"></circle>
83
+ <circle cx="12" cy="12" r="3"></circle>
84
+ <circle cx="20" cy="12" r="3"></circle>
85
+ </svg>
86
+ <svg class="gh-private-signup-btn-success" viewBox="0 0 15 14" aria-hidden="true" focusable="false">
87
+ <path d="M1 6.89286L6.10714 12L13.9643 1" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
88
+ </svg>
89
+ </span>
90
+ </button>
91
+ </div>
92
+ <p class="gh-private-signup-feedback" data-ghost-private-subscribe-feedback data-state="idle" aria-live="polite"></p>
93
+ </form>
94
+ {{/if}}
78
95
  {{/if}}
79
96
  </header>
80
97
  {{#unless @site.allow_self_signup}}
81
- <form class="gh-signin gh-private-signin gh-private-access-form" method="post" novalidate="novalidate">
82
- <div class="gh-private-signup-fields">
83
- <div class="form-group gh-private-access-input-wrap{{#if error}} error{{/if}}">
84
- {{input_password class="gh-input gh-private-signup-input" placeholder=(t "Access code") data-1p-ignore="true"}}
85
- {{#if error}}
86
- <p class="main-error">{{error.message}}</p>
87
- {{/if}}
88
- </div>
89
- <button class="gh-btn gh-private-signup-btn" type="submit"><span>{{t "Enter"}} &rarr;</span></button>
90
- </div>
91
- </form>
98
+ {{> private-access-form}}
92
99
  {{/unless}}
93
100
  </section>
94
101
  {{#if @site.allow_self_signup}}
102
+ {{#unless @member}}
95
103
  <dialog class="gh-private-dialog" id="access" aria-labelledby="private-access-title" {{#if @site.accent_color}} style="--gh-private-accent-color: {{@site.accent_color}}; --gh-private-accent-color-rgba: {{color_to_rgba @site.accent_color 0.25}}; --gh-private-accent-contrast-color: {{contrast_text_color @site.accent_color}};"{{/if}} {{#if error}}data-auto-open="true"{{/if}}>
96
104
  <div class="gh-private-dialog-panel">
97
105
  <button class="gh-private-dialog-close" type="button" data-ghost-private-close aria-label="{{t "Close"}}">
@@ -103,19 +111,10 @@
103
111
  <header class="gh-private-dialog-header">
104
112
  <h2 id="private-access-title">{{t "Enter access code"}}</h2>
105
113
  </header>
106
- <form class="gh-signin gh-private-signin gh-private-access-form" method="post" novalidate="novalidate">
107
- <div class="gh-private-signup-fields">
108
- <div class="form-group gh-private-access-input-wrap{{#if error}} error{{/if}}">
109
- {{input_password class="gh-input gh-private-signup-input" placeholder=(t "Access code") data-1p-ignore="true"}}
110
- {{#if error}}
111
- <p class="main-error">{{error.message}}</p>
112
- {{/if}}
113
- </div>
114
- <button class="gh-btn gh-private-signup-btn" type="submit"><span>{{t "Enter"}} &rarr;</span></button>
115
- </div>
116
- </form>
114
+ {{> private-access-form}}
117
115
  </div>
118
116
  </dialog>
117
+ {{/unless}}
119
118
  {{/if}}
120
119
  <div class="gh-private-trigger-wrap">
121
120
  <div class="gh-private-footer-links">
@@ -127,8 +126,10 @@
127
126
  </a>
128
127
  <span class="gh-private-footer-separator" aria-hidden="true">|</span>
129
128
  {{#if @site.allow_self_signup}}
130
- <a class="gh-private-trigger" href="#access" data-ghost-private-trigger>{{t "Enter access code"}}</a>
131
- <span class="gh-private-footer-separator" aria-hidden="true">|</span>
129
+ {{#unless @member}}
130
+ <a class="gh-private-trigger" href="#access" data-ghost-private-trigger>{{t "Enter access code"}}</a>
131
+ <span class="gh-private-footer-separator" aria-hidden="true">|</span>
132
+ {{/unless}}
132
133
  {{/if}}
133
134
  <a href="{{@site.admin_url}}">{{t "Site owner login"}}</a>
134
135
  </div>
@@ -13,7 +13,7 @@ const tpl = require('@tryghost/tpl');
13
13
 
14
14
  const messages = {
15
15
  invalidData:
16
- 'The {{cancel_link}} helper was used outside of a subscription context. See https://ghost.org/docs/themes/members/#cancel-links.',
16
+ 'The {{cancel_link}} helper was used outside of a subscription context. See https://docs.ghost.org/themes/members/#cancel-links.',
17
17
  };
18
18
 
19
19
  // eslint-disable-next-line camelcase
@@ -45,7 +45,7 @@ module.exports = function cancelLabsWrapper() {
45
45
  flagKey: 'members',
46
46
  flagName: 'Members',
47
47
  helperName: 'cancel_link',
48
- helpUrl: 'https://ghost.org/docs/themes/members/',
48
+ helpUrl: 'https://docs.ghost.org/themes/members/',
49
49
  },
50
50
  () => {
51
51
  return cancel_link.apply(self, args); // eslint-disable-line camelcase
@@ -9,7 +9,7 @@ const _ = require('lodash');
9
9
 
10
10
  const messages = {
11
11
  invalidData:
12
- 'The {{pagination}} helper was used outside of a paginated context. See https://ghost.org/docs/themes/helpers/pagination/.',
12
+ 'The {{pagination}} helper was used outside of a paginated context. See https://docs.ghost.org/themes/helpers/pagination/.',
13
13
  valuesMustBeDefined: 'All values must be defined for page, pages, limit and total',
14
14
  nextPrevValuesMustBeNumeric: 'Invalid value, Next/Prev must be a number',
15
15
  valuesMustBeNumeric: 'Invalid value, check page, pages, limit and total are numbers',
@@ -26,7 +26,7 @@ module.exports = function pagination(options) {
26
26
  throw new errors.IncorrectUsageError({
27
27
  level: 'normal',
28
28
  message: tpl(messages.invalidData),
29
- help: 'https://ghost.org/docs/themes/helpers/pagination/',
29
+ help: 'https://docs.ghost.org/themes/helpers/pagination/',
30
30
  });
31
31
  }
32
32
 
@@ -54,7 +54,7 @@ module.exports = function social_accounts(source, options) {
54
54
  throw new errors.IncorrectUsageError({
55
55
  level: 'normal',
56
56
  message: tpl(messages.sourceRequired),
57
- help: 'https://ghost.org/docs/themes/helpers/social-accounts/',
57
+ help: 'https://docs.ghost.org/themes/helpers/social-accounts/',
58
58
  });
59
59
  }
60
60
 
@@ -67,7 +67,7 @@ module.exports = function social_accounts(source, options) {
67
67
  throw new errors.IncorrectUsageError({
68
68
  level: 'normal',
69
69
  message: tpl(messages.blockRequired),
70
- help: 'https://ghost.org/docs/themes/helpers/social-accounts/',
70
+ help: 'https://docs.ghost.org/themes/helpers/social-accounts/',
71
71
  });
72
72
  }
73
73
 
@@ -740,7 +740,7 @@ h2 {
740
740
  }
741
741
 
742
742
  .gh-private-signup-form,
743
- .gh-flow-content.private > .gh-private-access-form {
743
+ .gh-flow-content.private .gh-private-access-form {
744
744
  width: min(100%, 550px);
745
745
  margin: 40px auto 0;
746
746
  }
@@ -1 +1 @@
1
- /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}.black{color:#15171a}.darkgrey{color:#394047}.midgrey{color:#7c8b9a}.lightgrey{color:#ced4d9}.blue{color:#14b8ff}.red{color:#f50b23}.orange{color:#ffb41f}.green{color:#30cf43}.darkgrey-hover:hover{color:#394047}.midgrey-hover:hover{color:#7c8b9a}.lightgrey-hover:hover{color:#ced4d9}.blue-hover:hover{color:#14b8ff}.red-hover:hover{color:#f50b23}.orange-hover:hover{color:#ffb41f}.green-hover:hover{color:#30cf43}*,:after,:before{box-sizing:border-box}html{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:62.5%;letter-spacing:.2px;line-height:1.65;overflow:hidden;-webkit-tap-highlight-color:rgba(0,0,0,0)}body,html{height:100%;width:100%}body{color:#343f44;font-size:1.4rem;overflow:auto;overflow-x:hidden}.gh-view{-ms-flex-positive:1;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;flex-grow:1}h1,h2{color:#343f44;font-size:2.9rem;line-height:1.15em;margin:0 0 .3em;text-indent:-1px;text-rendering:optimizeLegibility}@media (max-width:500px){h1{font-size:2.4rem}}.gh-input{-webkit-appearance:none;border:1px solid #d6e3eb;border-radius:4px;color:#4b5b62;display:block;font-size:1.6rem;font-weight:300;height:40px;line-height:1em;padding:10px 12px;transition:border-color .15s linear;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;width:100%}.gh-input:focus{border-color:#b4cbda;outline:0}.gh-btn{border:1px solid #d6e3eb;border-radius:5px;color:#829aa8;display:inline-block;fill:#829aa8;outline:none;text-decoration:none!important;transition:all .2s ease;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-font-smoothing:subpixel-antialiased}.gh-btn span{border-radius:4px;display:block;font-size:1.3rem;font-weight:400;height:33px;letter-spacing:.2px;line-height:33px;padding:0 12px;text-align:center}.gh-btn:hover{border-color:#b4cbda}.gh-btn-hover-blue:hover{border-color:#3eb0ef;color:#3eb0ef}.gh-btn-blue{background:linear-gradient(#3da1d6,#2288bf);border:0;box-shadow:0 1px 0 rgba(0,0,0,.12);color:#fff;fill:#fff;padding:1px;text-shadow:0 -1px 0 rgba(0,0,0,.1);transition:none!important}.gh-btn-blue span{background:linear-gradient(#4ab6f0,#2fa5e4 60%,#2fa5e4 90%,#38a9e5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1)}.gh-btn-blue:active,.gh-btn-blue:focus{background:#1e78a9}.gh-btn-blue:active span,.gh-btn-blue:focus span{background:#29a0e0;box-shadow:none}.gh-btn-block{display:block;width:100%}.gh-input-icon{display:block;position:relative}.gh-input-icon svg{fill:color(var(--midgrey) l(15%));height:14px;left:10px;position:absolute;top:50%;transform:translateY(-7px);width:auto;z-index:2}.gh-input-icon input{padding-left:35px}.gh-app{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden}.gh-viewport{max-height:100%;overflow:hidden}.gh-main,.gh-viewport{-ms-flex-positive:1;display:-ms-flexbox;display:flex;flex-grow:1}.gh-main{background:#fff;overflow-y:auto;position:relative}.gh-flow{background:linear-gradient(315deg,#efefef,#fff);display:flex;flex-direction:column;flex-grow:1;min-height:100%;overflow-y:auto}.gh-flow:has(.gh-flow-content.private){background:#fff}.gh-flow-content-wrap{align-items:center;display:flex;flex-direction:column;flex-grow:1;flex-shrink:0;justify-content:center;margin:0 24px;padding-bottom:8vh}.gh-flow-content-wrap .site-icon{border-radius:3px;height:70px;width:70px}.gh-flow-content{background:#fff;border-radius:3px;box-shadow:0 2.8px 2.2px rgba(0,0,0,.02),0 6.7px 5.3px rgba(0,0,0,.02),0 12.5px 10px rgba(0,0,0,.02),0 22.3px 17.9px rgba(0,0,0,.03),0 41.8px 33.4px rgba(0,0,0,.03),0 100px 80px rgba(0,0,0,.05);color:var(--darkgrey);display:flex;flex-direction:column;font-size:1.9rem;font-weight:300;line-height:1.5em;margin:4rem 0 6rem;max-width:520px;padding:40px;width:100%}.gh-flow-content.unsubscribe{align-items:center;justify-content:center;margin:4rem 0;max-width:560px;min-height:200px;text-align:center}.gh-flow-content.private{box-shadow:none}.gh-flow-content.private header .site-icon{margin-bottom:20px}.gh-flow-content.private h1{text-align:center}.gh-private-dialog{background:transparent;border:0;border-radius:24px;box-shadow:0 32px 80px rgba(0,0,0,.18);color:#15171a;padding:0;width:min(92vw,440px)}.gh-private-description{color:#7c8b9a;font-size:2.05rem;line-height:1.35em;margin:-18px 0 0;max-width:550px;text-align:center;text-wrap:balance}.gh-flow-content.private>.gh-private-access-form,.gh-private-signup-form{margin:40px auto 0;width:min(100%,550px)}.gh-private-signup-fields{align-items:stretch;display:flex;gap:12px}.gh-private-signup-input{flex:1;min-width:0}.gh-private-signup-btn{flex-shrink:0;margin:0;min-width:140px}.gh-private-access-form .gh-private-signup-btn,.gh-private-signup-form .gh-private-signup-btn{margin-top:0;width:auto}.gh-private-signup-btn-content{align-items:center;display:grid;grid-template-columns:1fr;justify-items:center;line-height:1;min-height:33px;min-width:104px;position:relative}.gh-private-signup-btn-label,.gh-private-signup-btn-loading,.gh-private-signup-btn-success{grid-area:1/1;transition:opacity .2s ease,visibility .2s step-end;white-space:nowrap}.gh-private-signup-btn-label{font-weight:inherit}.gh-private-signup-btn-loading,.gh-private-signup-btn-success{display:block;height:18px;left:50%;opacity:0;overflow:visible;position:absolute;top:50%;transform:translate(-50%,-50%);visibility:hidden;width:18px}.gh-private-signup-btn-loading circle{animation:gh-private-signup-dots .8s ease-in-out infinite;opacity:.4;transform-origin:center}.gh-private-signup-btn-loading circle:first-child{animation-delay:-.3s}.gh-private-signup-btn-loading circle:nth-child(2){animation-delay:-.15s}.gh-private-signup-form[data-state=loading] .gh-private-signup-btn-label,.gh-private-signup-form[data-state=success] .gh-private-signup-btn-label{opacity:0}.gh-private-signup-form[data-state=loading] .gh-private-signup-btn-loading,.gh-private-signup-form[data-state=success] .gh-private-signup-btn-success{opacity:1;transition-timing-function:step-start;visibility:visible}.gh-private-signup-feedback{color:#7c8b9a;font-size:1.4rem;line-height:1.4;margin:12px 0 0;min-height:2.2rem;text-align:center}.gh-private-signup-feedback[data-state=error]{color:#f50b23}.gh-private-signup-feedback[data-state=success]{color:#30cf43}.gh-private-signup-form[data-state=loading] .gh-private-signup-btn,.gh-private-signup-form[data-state=success] .gh-private-signup-btn{opacity:.75;pointer-events:none}@keyframes gh-private-signup-dots{0%,to{opacity:.4;transform:scale(.75)}50%{opacity:1;transform:scale(1)}}.gh-private-dialog::backdrop{backdrop-filter:blur(10px);background:rgba(21,23,26,.4)}.gh-private-dialog-panel{background:#fff;border-radius:24px;padding:32px;position:relative}.gh-private-dialog-header{margin-bottom:24px}.gh-private-dialog-header h2{color:#15171a;font-size:3rem;line-height:1.1;margin:0}.gh-private-dialog-close{align-items:center;background:transparent;border:0;color:#7c8b9a;cursor:pointer;display:inline-flex;height:36px;justify-content:center;position:absolute;right:16px;top:16px;width:36px}.gh-private-dialog-close-icon{height:18px;width:18px}.gh-private-dialog-close:hover{color:#15171a}.gh-private-dialog-close:focus-visible,.gh-private-powered:focus-visible{outline:2px solid #15171a;outline-offset:4px}.gh-private-signin .gh-btn{max-width:none;width:100%}.gh-private-access-form .form-group{flex:1;margin-bottom:0;min-width:0}.gh-private-signin .main-error{margin-top:12px;position:static;text-align:left}.gh-private-trigger-wrap{bottom:calc(29px + env(safe-area-inset-bottom, 0px));box-sizing:border-box;display:flex;justify-content:center;left:0;padding:0 24px;pointer-events:none;position:fixed;right:0;z-index:20}.gh-private-powered{align-items:center;color:#15171a;display:inline-flex;font-size:inherit;font-weight:400;line-height:inherit;text-decoration:none;transition:color .2s ease}.gh-private-powered-logo{flex-shrink:0;height:16px;margin-inline-end:6px;width:16px}.gh-private-powered:hover{color:#15171a}.gh-private-footer-links{align-items:center;color:#15171a;display:flex;flex-wrap:wrap;font-size:1.4rem;gap:10px;justify-content:center;line-height:1.5;pointer-events:auto}.gh-private-footer-separator{color:#b8c1cb}.gh-private-footer-links a{color:#15171a;text-decoration:none}.gh-private-footer-links a:hover{text-decoration:underline}.gh-private-dialog[open].gh-private-dialog-fallback,.no-js .gh-private-dialog{box-shadow:none;margin-top:32px;max-width:520px;position:static;width:100%}.no-js .gh-private-dialog:not([open]){display:block}.no-js .gh-private-dialog::backdrop{display:none}.no-js .gh-private-dialog-panel{background:transparent;padding:0}.no-js .gh-private-dialog-close,.no-js .gh-private-trigger-wrap{display:none}@media (max-width:600px){.gh-private-footer-links{justify-content:center}.gh-private-footer-links .gh-private-powered{flex-basis:100%;justify-content:center}.gh-private-footer-links .gh-private-powered+.gh-private-footer-separator{display:none}}@media (max-width:500px){.gh-flow-content{background:transparent;box-shadow:none;padding:0}.gh-private-dialog-panel{border-radius:20px;padding:28px 24px 24px}.gh-private-description{font-size:1.8rem}.gh-private-signup-fields{flex-direction:column}.gh-private-signup-btn{width:100%}.gh-private-dialog-header h2{font-size:2.4rem}.gh-private-trigger-wrap{padding:0 24px}}@media (prefers-reduced-motion:no-preference){.gh-private-dialog{transition:transform .18s ease,opacity .18s ease,background-color .18s ease}}.gh-flow-content header{align-items:center;display:flex;flex-direction:column}.gh-flow-content h1{color:#15171a;font-size:4.1rem;font-weight:700;line-height:1.15em;margin-bottom:24px}.gh-flow-content.unsubscribe h1{font-size:3.2rem}@media (max-width:600px){.gh-flow-content h1,.gh-flow-content.unsubscribe h1{font-size:6vw}}.gh-flow-content.unsubscribe p{color:#394047;font-size:1.8rem;margin:0 0 .4em}@media (max-width:500px){.gh-flow-content.unsubscribe p{font-size:1.6rem;line-height:1.5}}.gh-flow-content .gh-btn{display:block;margin:20px auto 0;max-width:400px}.gh-flow-content .form-group{margin-bottom:2.5rem;position:relative}.gh-flow-content .form-group.error .gh-input{border-color:#f50b23;box-shadow:0 0 0 3px rgba(239,24,24,.15)}.gh-flow-content .main-error{color:#7c8b9a;font-size:1.35rem;font-weight:400;margin:0;position:absolute;right:0;text-align:center;user-select:text}.gh-flow-em{font-weight:500}.unsubscribe-footer{font-size:1.5rem;text-align:center}@media (max-width:500px){.unsubscribe-footer{font-size:1.4rem;line-height:1.4em;padding:0 24px}}.unsubscribe-footer p{color:#7c8b9a;margin:0 0 .4rem}.unsubscribe-footer a{color:#15171a;text-decoration:none}.unsubscribe-footer a:hover{text-decoration:underline}.gh-signin{margin-bottom:1.5rem}.gh-signin .gh-input,.gh-signin .gh-input:-webkit-autofill:first-line{background:#f3f6f7;border:1px solid #f3f6f7;border-radius:8px;color:var(--black);font-size:1.8rem;height:54px;padding:12px 16px}.gh-signin .gh-input::placeholder{color:#abb4be;font-weight:400;opacity:1}.gh-signin .gh-input::-webkit-input-placeholder{color:#abb4be;font-weight:400}.gh-signin .gh-input:-ms-input-placeholder{color:#abb4be;font-weight:400}.gh-signin .gh-input::-moz-placeholder{color:#abb4be;font-weight:400;opacity:1}.gh-signin .gh-input:focus{border-color:#30cf43;box-shadow:0 0 0 3px rgba(48,207,67,.25)}#access .gh-private-signin .gh-input:focus,.gh-flow-content-wrap .gh-private-access-form.gh-signin .gh-input:focus,.gh-flow-content-wrap .gh-private-signup-form.gh-signin .gh-input:focus{border:1px solid var(--gh-private-accent-color,#30cf43);box-shadow:0 0 0 3px var(--gh-private-accent-color-rgba,rgba(48,207,67,.25))}.gh-signin .gh-btn{background:#15171a;border-radius:8px;font-weight:300;height:54px;line-height:54px;margin:0;margin-top:32px;max-width:unset;transition:all .4s ease;width:100%;-webkit-font-smoothing:subpixel-antialiased}.gh-private-access-form.gh-signin .gh-private-signup-btn,.gh-private-signup-form.gh-signin .gh-private-signup-btn{align-items:center;background:var(--gh-private-accent-color,#15171a);border-color:var(--gh-private-accent-color,#15171a);color:var(--gh-private-accent-contrast-color,#fff);display:inline-flex;fill:var(--gh-private-accent-contrast-color,#fff);justify-content:center;margin-top:0;width:auto}.gh-private-access-form.gh-signin .gh-private-signup-btn span,.gh-private-signup-form.gh-signin .gh-private-signup-btn span{color:var(--gh-private-accent-contrast-color,#fff)}.gh-signin .gh-btn span{color:#fff;font-size:1.8rem}.error-content{flex-grow:1;justify-content:center;padding:8vw;user-select:text}.error-content,.error-details{align-items:center;display:flex}.error-details{margin-bottom:4rem}.error-ghost{height:115px;margin:15px}@media (max-width:630px){.error-ghost{display:none}}.error-code{color:#c5d2d9;font-size:10vw;font-weight:600;letter-spacing:-.4vw;line-height:.9em;margin:0}.error-description{border:none;color:#54666d;font-size:2.3rem;font-weight:300;line-height:1.3em;margin:0;padding:0}.error-message{align-items:center;display:flex;flex-direction:column;margin:15px}.error-message a{font-size:1.4rem;line-height:1;margin:8px 0}.error-link{background-color:transparent;color:#5ba4e5;text-decoration:none;transition:background .3s,color .3s}.error-stack{background-color:hsla(0,0%,100%,.3);margin:1rem auto;max-width:800px;padding:2rem}.error-stack-list{list-style-type:none;margin:0;padding:0}.error-stack-list li{display:block}.error-stack-list li:before{color:#bbb;content:"\21AA";display:inline-block;font-size:1.2rem;margin-right:.5rem}.error-stack-function{font-weight:700}
1
+ /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}.black{color:#15171a}.darkgrey{color:#394047}.midgrey{color:#7c8b9a}.lightgrey{color:#ced4d9}.blue{color:#14b8ff}.red{color:#f50b23}.orange{color:#ffb41f}.green{color:#30cf43}.darkgrey-hover:hover{color:#394047}.midgrey-hover:hover{color:#7c8b9a}.lightgrey-hover:hover{color:#ced4d9}.blue-hover:hover{color:#14b8ff}.red-hover:hover{color:#f50b23}.orange-hover:hover{color:#ffb41f}.green-hover:hover{color:#30cf43}*,:after,:before{box-sizing:border-box}html{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:62.5%;letter-spacing:.2px;line-height:1.65;overflow:hidden;-webkit-tap-highlight-color:rgba(0,0,0,0)}body,html{height:100%;width:100%}body{color:#343f44;font-size:1.4rem;overflow:auto;overflow-x:hidden}.gh-view{-ms-flex-positive:1;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;flex-grow:1}h1,h2{color:#343f44;font-size:2.9rem;line-height:1.15em;margin:0 0 .3em;text-indent:-1px;text-rendering:optimizeLegibility}@media (max-width:500px){h1{font-size:2.4rem}}.gh-input{-webkit-appearance:none;border:1px solid #d6e3eb;border-radius:4px;color:#4b5b62;display:block;font-size:1.6rem;font-weight:300;height:40px;line-height:1em;padding:10px 12px;transition:border-color .15s linear;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;width:100%}.gh-input:focus{border-color:#b4cbda;outline:0}.gh-btn{border:1px solid #d6e3eb;border-radius:5px;color:#829aa8;display:inline-block;fill:#829aa8;outline:none;text-decoration:none!important;transition:all .2s ease;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-font-smoothing:subpixel-antialiased}.gh-btn span{border-radius:4px;display:block;font-size:1.3rem;font-weight:400;height:33px;letter-spacing:.2px;line-height:33px;padding:0 12px;text-align:center}.gh-btn:hover{border-color:#b4cbda}.gh-btn-hover-blue:hover{border-color:#3eb0ef;color:#3eb0ef}.gh-btn-blue{background:linear-gradient(#3da1d6,#2288bf);border:0;box-shadow:0 1px 0 rgba(0,0,0,.12);color:#fff;fill:#fff;padding:1px;text-shadow:0 -1px 0 rgba(0,0,0,.1);transition:none!important}.gh-btn-blue span{background:linear-gradient(#4ab6f0,#2fa5e4 60%,#2fa5e4 90%,#38a9e5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1)}.gh-btn-blue:active,.gh-btn-blue:focus{background:#1e78a9}.gh-btn-blue:active span,.gh-btn-blue:focus span{background:#29a0e0;box-shadow:none}.gh-btn-block{display:block;width:100%}.gh-input-icon{display:block;position:relative}.gh-input-icon svg{fill:color(var(--midgrey) l(15%));height:14px;left:10px;position:absolute;top:50%;transform:translateY(-7px);width:auto;z-index:2}.gh-input-icon input{padding-left:35px}.gh-app{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden}.gh-viewport{max-height:100%;overflow:hidden}.gh-main,.gh-viewport{-ms-flex-positive:1;display:-ms-flexbox;display:flex;flex-grow:1}.gh-main{background:#fff;overflow-y:auto;position:relative}.gh-flow{background:linear-gradient(315deg,#efefef,#fff);display:flex;flex-direction:column;flex-grow:1;min-height:100%;overflow-y:auto}.gh-flow:has(.gh-flow-content.private){background:#fff}.gh-flow-content-wrap{align-items:center;display:flex;flex-direction:column;flex-grow:1;flex-shrink:0;justify-content:center;margin:0 24px;padding-bottom:8vh}.gh-flow-content-wrap .site-icon{border-radius:3px;height:70px;width:70px}.gh-flow-content{background:#fff;border-radius:3px;box-shadow:0 2.8px 2.2px rgba(0,0,0,.02),0 6.7px 5.3px rgba(0,0,0,.02),0 12.5px 10px rgba(0,0,0,.02),0 22.3px 17.9px rgba(0,0,0,.03),0 41.8px 33.4px rgba(0,0,0,.03),0 100px 80px rgba(0,0,0,.05);color:var(--darkgrey);display:flex;flex-direction:column;font-size:1.9rem;font-weight:300;line-height:1.5em;margin:4rem 0 6rem;max-width:520px;padding:40px;width:100%}.gh-flow-content.unsubscribe{align-items:center;justify-content:center;margin:4rem 0;max-width:560px;min-height:200px;text-align:center}.gh-flow-content.private{box-shadow:none}.gh-flow-content.private header .site-icon{margin-bottom:20px}.gh-flow-content.private h1{text-align:center}.gh-private-dialog{background:transparent;border:0;border-radius:24px;box-shadow:0 32px 80px rgba(0,0,0,.18);color:#15171a;padding:0;width:min(92vw,440px)}.gh-private-description{color:#7c8b9a;font-size:2.05rem;line-height:1.35em;margin:-18px 0 0;max-width:550px;text-align:center;text-wrap:balance}.gh-flow-content.private .gh-private-access-form,.gh-private-signup-form{margin:40px auto 0;width:min(100%,550px)}.gh-private-signup-fields{align-items:stretch;display:flex;gap:12px}.gh-private-signup-input{flex:1;min-width:0}.gh-private-signup-btn{flex-shrink:0;margin:0;min-width:140px}.gh-private-access-form .gh-private-signup-btn,.gh-private-signup-form .gh-private-signup-btn{margin-top:0;width:auto}.gh-private-signup-btn-content{align-items:center;display:grid;grid-template-columns:1fr;justify-items:center;line-height:1;min-height:33px;min-width:104px;position:relative}.gh-private-signup-btn-label,.gh-private-signup-btn-loading,.gh-private-signup-btn-success{grid-area:1/1;transition:opacity .2s ease,visibility .2s step-end;white-space:nowrap}.gh-private-signup-btn-label{font-weight:inherit}.gh-private-signup-btn-loading,.gh-private-signup-btn-success{display:block;height:18px;left:50%;opacity:0;overflow:visible;position:absolute;top:50%;transform:translate(-50%,-50%);visibility:hidden;width:18px}.gh-private-signup-btn-loading circle{animation:gh-private-signup-dots .8s ease-in-out infinite;opacity:.4;transform-origin:center}.gh-private-signup-btn-loading circle:first-child{animation-delay:-.3s}.gh-private-signup-btn-loading circle:nth-child(2){animation-delay:-.15s}.gh-private-signup-form[data-state=loading] .gh-private-signup-btn-label,.gh-private-signup-form[data-state=success] .gh-private-signup-btn-label{opacity:0}.gh-private-signup-form[data-state=loading] .gh-private-signup-btn-loading,.gh-private-signup-form[data-state=success] .gh-private-signup-btn-success{opacity:1;transition-timing-function:step-start;visibility:visible}.gh-private-signup-feedback{color:#7c8b9a;font-size:1.4rem;line-height:1.4;margin:12px 0 0;min-height:2.2rem;text-align:center}.gh-private-signup-feedback[data-state=error]{color:#f50b23}.gh-private-signup-feedback[data-state=success]{color:#30cf43}.gh-private-signup-form[data-state=loading] .gh-private-signup-btn,.gh-private-signup-form[data-state=success] .gh-private-signup-btn{opacity:.75;pointer-events:none}@keyframes gh-private-signup-dots{0%,to{opacity:.4;transform:scale(.75)}50%{opacity:1;transform:scale(1)}}.gh-private-dialog::backdrop{backdrop-filter:blur(10px);background:rgba(21,23,26,.4)}.gh-private-dialog-panel{background:#fff;border-radius:24px;padding:32px;position:relative}.gh-private-dialog-header{margin-bottom:24px}.gh-private-dialog-header h2{color:#15171a;font-size:3rem;line-height:1.1;margin:0}.gh-private-dialog-close{align-items:center;background:transparent;border:0;color:#7c8b9a;cursor:pointer;display:inline-flex;height:36px;justify-content:center;position:absolute;right:16px;top:16px;width:36px}.gh-private-dialog-close-icon{height:18px;width:18px}.gh-private-dialog-close:hover{color:#15171a}.gh-private-dialog-close:focus-visible,.gh-private-powered:focus-visible{outline:2px solid #15171a;outline-offset:4px}.gh-private-signin .gh-btn{max-width:none;width:100%}.gh-private-access-form .form-group{flex:1;margin-bottom:0;min-width:0}.gh-private-signin .main-error{margin-top:12px;position:static;text-align:left}.gh-private-trigger-wrap{bottom:calc(29px + env(safe-area-inset-bottom, 0px));box-sizing:border-box;display:flex;justify-content:center;left:0;padding:0 24px;pointer-events:none;position:fixed;right:0;z-index:20}.gh-private-powered{align-items:center;color:#15171a;display:inline-flex;font-size:inherit;font-weight:400;line-height:inherit;text-decoration:none;transition:color .2s ease}.gh-private-powered-logo{flex-shrink:0;height:16px;margin-inline-end:6px;width:16px}.gh-private-powered:hover{color:#15171a}.gh-private-footer-links{align-items:center;color:#15171a;display:flex;flex-wrap:wrap;font-size:1.4rem;gap:10px;justify-content:center;line-height:1.5;pointer-events:auto}.gh-private-footer-separator{color:#b8c1cb}.gh-private-footer-links a{color:#15171a;text-decoration:none}.gh-private-footer-links a:hover{text-decoration:underline}.gh-private-dialog[open].gh-private-dialog-fallback,.no-js .gh-private-dialog{box-shadow:none;margin-top:32px;max-width:520px;position:static;width:100%}.no-js .gh-private-dialog:not([open]){display:block}.no-js .gh-private-dialog::backdrop{display:none}.no-js .gh-private-dialog-panel{background:transparent;padding:0}.no-js .gh-private-dialog-close,.no-js .gh-private-trigger-wrap{display:none}@media (max-width:600px){.gh-private-footer-links{justify-content:center}.gh-private-footer-links .gh-private-powered{flex-basis:100%;justify-content:center}.gh-private-footer-links .gh-private-powered+.gh-private-footer-separator{display:none}}@media (max-width:500px){.gh-flow-content{background:transparent;box-shadow:none;padding:0}.gh-private-dialog-panel{border-radius:20px;padding:28px 24px 24px}.gh-private-description{font-size:1.8rem}.gh-private-signup-fields{flex-direction:column}.gh-private-signup-btn{width:100%}.gh-private-dialog-header h2{font-size:2.4rem}.gh-private-trigger-wrap{padding:0 24px}}@media (prefers-reduced-motion:no-preference){.gh-private-dialog{transition:transform .18s ease,opacity .18s ease,background-color .18s ease}}.gh-flow-content header{align-items:center;display:flex;flex-direction:column}.gh-flow-content h1{color:#15171a;font-size:4.1rem;font-weight:700;line-height:1.15em;margin-bottom:24px}.gh-flow-content.unsubscribe h1{font-size:3.2rem}@media (max-width:600px){.gh-flow-content h1,.gh-flow-content.unsubscribe h1{font-size:6vw}}.gh-flow-content.unsubscribe p{color:#394047;font-size:1.8rem;margin:0 0 .4em}@media (max-width:500px){.gh-flow-content.unsubscribe p{font-size:1.6rem;line-height:1.5}}.gh-flow-content .gh-btn{display:block;margin:20px auto 0;max-width:400px}.gh-flow-content .form-group{margin-bottom:2.5rem;position:relative}.gh-flow-content .form-group.error .gh-input{border-color:#f50b23;box-shadow:0 0 0 3px rgba(239,24,24,.15)}.gh-flow-content .main-error{color:#7c8b9a;font-size:1.35rem;font-weight:400;margin:0;position:absolute;right:0;text-align:center;user-select:text}.gh-flow-em{font-weight:500}.unsubscribe-footer{font-size:1.5rem;text-align:center}@media (max-width:500px){.unsubscribe-footer{font-size:1.4rem;line-height:1.4em;padding:0 24px}}.unsubscribe-footer p{color:#7c8b9a;margin:0 0 .4rem}.unsubscribe-footer a{color:#15171a;text-decoration:none}.unsubscribe-footer a:hover{text-decoration:underline}.gh-signin{margin-bottom:1.5rem}.gh-signin .gh-input,.gh-signin .gh-input:-webkit-autofill:first-line{background:#f3f6f7;border:1px solid #f3f6f7;border-radius:8px;color:var(--black);font-size:1.8rem;height:54px;padding:12px 16px}.gh-signin .gh-input::placeholder{color:#abb4be;font-weight:400;opacity:1}.gh-signin .gh-input::-webkit-input-placeholder{color:#abb4be;font-weight:400}.gh-signin .gh-input:-ms-input-placeholder{color:#abb4be;font-weight:400}.gh-signin .gh-input::-moz-placeholder{color:#abb4be;font-weight:400;opacity:1}.gh-signin .gh-input:focus{border-color:#30cf43;box-shadow:0 0 0 3px rgba(48,207,67,.25)}#access .gh-private-signin .gh-input:focus,.gh-flow-content-wrap .gh-private-access-form.gh-signin .gh-input:focus,.gh-flow-content-wrap .gh-private-signup-form.gh-signin .gh-input:focus{border:1px solid var(--gh-private-accent-color,#30cf43);box-shadow:0 0 0 3px var(--gh-private-accent-color-rgba,rgba(48,207,67,.25))}.gh-signin .gh-btn{background:#15171a;border-radius:8px;font-weight:300;height:54px;line-height:54px;margin:0;margin-top:32px;max-width:unset;transition:all .4s ease;width:100%;-webkit-font-smoothing:subpixel-antialiased}.gh-private-access-form.gh-signin .gh-private-signup-btn,.gh-private-signup-form.gh-signin .gh-private-signup-btn{align-items:center;background:var(--gh-private-accent-color,#15171a);border-color:var(--gh-private-accent-color,#15171a);color:var(--gh-private-accent-contrast-color,#fff);display:inline-flex;fill:var(--gh-private-accent-contrast-color,#fff);justify-content:center;margin-top:0;width:auto}.gh-private-access-form.gh-signin .gh-private-signup-btn span,.gh-private-signup-form.gh-signin .gh-private-signup-btn span{color:var(--gh-private-accent-contrast-color,#fff)}.gh-signin .gh-btn span{color:#fff;font-size:1.8rem}.error-content{flex-grow:1;justify-content:center;padding:8vw;user-select:text}.error-content,.error-details{align-items:center;display:flex}.error-details{margin-bottom:4rem}.error-ghost{height:115px;margin:15px}@media (max-width:630px){.error-ghost{display:none}}.error-code{color:#c5d2d9;font-size:10vw;font-weight:600;letter-spacing:-.4vw;line-height:.9em;margin:0}.error-description{border:none;color:#54666d;font-size:2.3rem;font-weight:300;line-height:1.3em;margin:0;padding:0}.error-message{align-items:center;display:flex;flex-direction:column;margin:15px}.error-message a{font-size:1.4rem;line-height:1;margin:8px 0}.error-link{background-color:transparent;color:#5ba4e5;text-decoration:none;transition:background .3s,color .3s}.error-stack{background-color:hsla(0,0%,100%,.3);margin:1rem auto;max-width:800px;padding:2rem}.error-stack-list{list-style-type:none;margin:0;padding:0}.error-stack-list li{display:block}.error-stack-list li:before{color:#bbb;content:"\21AA";display:inline-block;font-size:1.2rem;margin-right:.5rem}.error-stack-function{font-weight:700}
@@ -15,6 +15,14 @@ const messages = {
15
15
  * @param {Object} data
16
16
  */
17
17
  module.exports = function renderer(req, res, data) {
18
+ // CASE: client hung up while we fetched data. Rendering into a dead socket is
19
+ // wasted work that lengthens the queue under load. 499 = client closed request.
20
+ if (res.destroyed && !res.writableEnded) {
21
+ debug('Client gone before render, skipping: ' + req.originalUrl);
22
+ res.statusCode = 499;
23
+ return;
24
+ }
25
+
18
26
  // Set response context
19
27
  setContext(req, res, data);
20
28
 
@@ -44,6 +52,13 @@ module.exports = function renderer(req, res, data) {
44
52
  return req.next(err);
45
53
  }
46
54
 
55
+ // The render itself can take seconds; the client may have gone in the meantime.
56
+ if (res.destroyed && !res.writableEnded) {
57
+ debug('Client gone during render, discarding: ' + req.originalUrl);
58
+ res.statusCode = 499;
59
+ return;
60
+ }
61
+
47
62
  // CASE: a {{#get}} or {{#collection}} helper aborted during rendering, so the
48
63
  // page contains fallback content — cap public caching at 60s so the broken page recovers quickly.
49
64
  if (res.locals?.degradedRender) {
@@ -11,9 +11,16 @@ class UserMapGenerator extends BaseMapGenerator {
11
11
  }
12
12
 
13
13
  validateImageUrl(imageUrl) {
14
+ /** @type {Parameters<typeof validator.isURL>[1]} */
15
+ const isUrlOptions = {
16
+ protocols: ['http', 'https'],
17
+ require_protocol: true,
18
+ };
14
19
  return (
15
- imageUrl &&
16
- validator.isURL(imageUrl, { protocols: ['http', 'https'], require_protocol: true })
20
+ typeof imageUrl === 'string' &&
21
+ // `validator.isURL` doesn't let us express "any TLD or localhost", so we do two checks.
22
+ (validator.isURL(imageUrl, isUrlOptions) ||
23
+ validator.isURL(imageUrl, { ...isUrlOptions, host_whitelist: ['localhost'] }))
17
24
  );
18
25
  }
19
26
  }
@@ -57,9 +57,10 @@ class LocalStorageBase extends ghost_storage_base_1.StorageBase {
57
57
  *
58
58
  * @param targetDir absolute or relative directory
59
59
  * @param fileName file name to normalize and append
60
- * @returns resolved absolute path inside storagePath
60
+ * @param allowRoot whether storagePath itself is a valid result
61
+ * @returns resolved absolute path inside storagePath, or storagePath when explicitly allowed
61
62
  */
62
- _resolveAndValidateStoragePath(targetDir, fileName) {
63
+ _resolveAndValidateStoragePath(targetDir, fileName, allowRoot = false) {
63
64
  const resolvedRoot = path_1.default.resolve(this.storagePath);
64
65
  // Resolve targetDir: if already inside storage root use as-is, otherwise treat as relative
65
66
  let resolvedBase;
@@ -85,9 +86,11 @@ class LocalStorageBase extends ghost_storage_base_1.StorageBase {
85
86
  else {
86
87
  resolvedPath = resolvedBase;
87
88
  }
88
- // Validate the resolved path is strictly inside the storage root (not equal to it)
89
+ // Validate the resolved path is inside the storage root. Callers which operate on files
90
+ // keep the stricter default; save() may target the root because the generated filename is
91
+ // validated separately before anything is written.
89
92
  const relative = path_1.default.relative(resolvedRoot, resolvedPath);
90
- if (relative === '' ||
93
+ if ((!allowRoot && relative === '') ||
91
94
  relative === '..' ||
92
95
  relative.startsWith('..' + path_1.default.sep) ||
93
96
  path_1.default.isAbsolute(relative)) {
@@ -103,7 +106,7 @@ class LocalStorageBase extends ghost_storage_base_1.StorageBase {
103
106
  */
104
107
  async save(file, targetDir) {
105
108
  targetDir = targetDir
106
- ? this._resolveAndValidateStoragePath(targetDir)
109
+ ? this._resolveAndValidateStoragePath(targetDir, undefined, true)
107
110
  : this.getTargetDir(this.storagePath);
108
111
  const targetFilename = await this.getUniqueFileName(file, targetDir);
109
112
  // Verify that we are saving directly under `targetDir` and not outside of it.