ghost 5.86.1 → 5.87.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 (170) hide show
  1. package/components/tryghost-adapter-cache-memory-ttl-5.87.0.tgz +0 -0
  2. package/components/{tryghost-adapter-cache-redis-5.86.1.tgz → tryghost-adapter-cache-redis-5.87.0.tgz} +0 -0
  3. package/components/tryghost-adapter-manager-5.87.0.tgz +0 -0
  4. package/components/tryghost-announcement-bar-settings-5.87.0.tgz +0 -0
  5. package/components/{tryghost-api-framework-5.86.1.tgz → tryghost-api-framework-5.87.0.tgz} +0 -0
  6. package/components/tryghost-api-version-compatibility-service-5.87.0.tgz +0 -0
  7. package/components/tryghost-audience-feedback-5.87.0.tgz +0 -0
  8. package/components/tryghost-bookshelf-repository-5.87.0.tgz +0 -0
  9. package/components/tryghost-bootstrap-socket-5.87.0.tgz +0 -0
  10. package/components/tryghost-collections-5.87.0.tgz +0 -0
  11. package/components/tryghost-constants-5.87.0.tgz +0 -0
  12. package/components/tryghost-custom-theme-settings-service-5.87.0.tgz +0 -0
  13. package/components/{tryghost-data-generator-5.86.1.tgz → tryghost-data-generator-5.87.0.tgz} +0 -0
  14. package/components/{tryghost-domain-events-5.86.1.tgz → tryghost-domain-events-5.87.0.tgz} +0 -0
  15. package/components/tryghost-donations-5.87.0.tgz +0 -0
  16. package/components/tryghost-dynamic-routing-events-5.87.0.tgz +0 -0
  17. package/components/tryghost-email-addresses-5.87.0.tgz +0 -0
  18. package/components/tryghost-email-analytics-provider-mailgun-5.87.0.tgz +0 -0
  19. package/components/{tryghost-email-analytics-service-5.86.1.tgz → tryghost-email-analytics-service-5.87.0.tgz} +0 -0
  20. package/components/tryghost-email-content-generator-5.87.0.tgz +0 -0
  21. package/components/{tryghost-email-events-5.86.1.tgz → tryghost-email-events-5.87.0.tgz} +0 -0
  22. package/components/{tryghost-email-service-5.86.1.tgz → tryghost-email-service-5.87.0.tgz} +0 -0
  23. package/components/tryghost-email-suppression-list-5.87.0.tgz +0 -0
  24. package/components/tryghost-express-dynamic-redirects-5.87.0.tgz +0 -0
  25. package/components/tryghost-external-media-inliner-5.87.0.tgz +0 -0
  26. package/components/tryghost-extract-api-key-5.87.0.tgz +0 -0
  27. package/components/tryghost-ghost-5.87.0.tgz +0 -0
  28. package/components/tryghost-html-to-plaintext-5.87.0.tgz +0 -0
  29. package/components/tryghost-i18n-5.87.0.tgz +0 -0
  30. package/components/{tryghost-importer-handler-content-files-5.86.1.tgz → tryghost-importer-handler-content-files-5.87.0.tgz} +0 -0
  31. package/components/tryghost-importer-revue-5.87.0.tgz +0 -0
  32. package/components/tryghost-in-memory-repository-5.87.0.tgz +0 -0
  33. package/components/{tryghost-job-manager-5.86.1.tgz → tryghost-job-manager-5.87.0.tgz} +0 -0
  34. package/components/tryghost-link-redirects-5.87.0.tgz +0 -0
  35. package/components/tryghost-link-replacer-5.87.0.tgz +0 -0
  36. package/components/tryghost-link-tracking-5.87.0.tgz +0 -0
  37. package/components/{tryghost-magic-link-5.86.1.tgz → tryghost-magic-link-5.87.0.tgz} +0 -0
  38. package/components/{tryghost-mail-events-5.86.1.tgz → tryghost-mail-events-5.87.0.tgz} +0 -0
  39. package/components/{tryghost-mailgun-client-5.86.1.tgz → tryghost-mailgun-client-5.87.0.tgz} +0 -0
  40. package/components/tryghost-member-attribution-5.87.0.tgz +0 -0
  41. package/components/{tryghost-member-events-5.86.1.tgz → tryghost-member-events-5.87.0.tgz} +0 -0
  42. package/components/tryghost-members-api-5.87.0.tgz +0 -0
  43. package/components/tryghost-members-csv-5.87.0.tgz +0 -0
  44. package/components/tryghost-members-events-service-5.87.0.tgz +0 -0
  45. package/components/tryghost-members-importer-5.87.0.tgz +0 -0
  46. package/components/{tryghost-members-offers-5.86.1.tgz → tryghost-members-offers-5.87.0.tgz} +0 -0
  47. package/components/tryghost-members-payments-5.87.0.tgz +0 -0
  48. package/components/tryghost-members-ssr-5.87.0.tgz +0 -0
  49. package/components/{tryghost-members-stripe-service-5.86.1.tgz → tryghost-members-stripe-service-5.87.0.tgz} +0 -0
  50. package/components/tryghost-mentions-email-report-5.87.0.tgz +0 -0
  51. package/components/tryghost-milestones-5.87.0.tgz +0 -0
  52. package/components/tryghost-minifier-5.87.0.tgz +0 -0
  53. package/components/tryghost-model-to-domain-event-interceptor-5.87.0.tgz +0 -0
  54. package/components/tryghost-mw-api-version-mismatch-5.87.0.tgz +0 -0
  55. package/components/tryghost-mw-cache-control-5.87.0.tgz +0 -0
  56. package/components/tryghost-mw-error-handler-5.87.0.tgz +0 -0
  57. package/components/tryghost-mw-session-from-token-5.87.0.tgz +0 -0
  58. package/components/tryghost-mw-update-user-last-seen-5.87.0.tgz +0 -0
  59. package/components/tryghost-mw-version-match-5.87.0.tgz +0 -0
  60. package/components/tryghost-mw-vhost-5.87.0.tgz +0 -0
  61. package/components/{tryghost-nql-filter-expansions-5.86.1.tgz → tryghost-nql-filter-expansions-5.87.0.tgz} +0 -0
  62. package/components/tryghost-oembed-service-5.87.0.tgz +0 -0
  63. package/components/tryghost-package-json-5.87.0.tgz +0 -0
  64. package/components/tryghost-post-events-5.87.0.tgz +0 -0
  65. package/components/tryghost-post-revisions-5.87.0.tgz +0 -0
  66. package/components/tryghost-posts-service-5.87.0.tgz +0 -0
  67. package/components/tryghost-recommendations-5.87.0.tgz +0 -0
  68. package/components/tryghost-referrers-5.87.0.tgz +0 -0
  69. package/components/{tryghost-security-5.86.1.tgz → tryghost-security-5.87.0.tgz} +0 -0
  70. package/components/tryghost-session-service-5.87.0.tgz +0 -0
  71. package/components/tryghost-settings-path-manager-5.87.0.tgz +0 -0
  72. package/components/tryghost-slack-notifications-5.87.0.tgz +0 -0
  73. package/components/tryghost-staff-service-5.87.0.tgz +0 -0
  74. package/components/tryghost-stats-service-5.87.0.tgz +0 -0
  75. package/components/{tryghost-tiers-5.86.1.tgz → tryghost-tiers-5.87.0.tgz} +0 -0
  76. package/components/{tryghost-update-check-service-5.86.1.tgz → tryghost-update-check-service-5.87.0.tgz} +0 -0
  77. package/components/tryghost-verification-trigger-5.87.0.tgz +0 -0
  78. package/components/tryghost-version-notifications-data-service-5.87.0.tgz +0 -0
  79. package/components/tryghost-webmentions-5.87.0.tgz +0 -0
  80. package/core/built/admin/assets/admin-x-activitypub/admin-x-activitypub.js +2 -2
  81. package/core/built/admin/assets/admin-x-activitypub/{index-8aaa062c.mjs → index-adf6f50d.mjs} +1907 -1876
  82. package/core/built/admin/assets/admin-x-activitypub/{modals-124e649f.mjs → modals-c796922a.mjs} +210 -220
  83. package/core/built/admin/assets/admin-x-settings/{CodeEditorView-7dd72fff.mjs → CodeEditorView-18434b62.mjs} +2 -2
  84. package/core/built/admin/assets/admin-x-settings/admin-x-settings.js +1 -1
  85. package/core/built/admin/assets/admin-x-settings/{index-3b15dfb3.mjs → index-26c4c463.mjs} +2 -2
  86. package/core/built/admin/assets/admin-x-settings/{index-8b8bf7d6.mjs → index-c8f7240c.mjs} +25 -26
  87. package/core/built/admin/assets/admin-x-settings/{modals-71f5a60d.mjs → modals-bef82301.mjs} +4 -5
  88. package/core/built/admin/assets/{chunk.524.1f4d5090856e8f276abe.js → chunk.524.d2e0fcb8c19f3c1a3b30.js} +5 -5
  89. package/core/built/admin/assets/{chunk.582.591841f06bb7c4fb603e.js → chunk.582.21faf5b79ae545480852.js} +6 -6
  90. package/core/built/admin/assets/{ghost-cc7512accd98e0fa3cc0906c52204a55.js → ghost-7cd5e5705abfd8aa74248fc44aec54b5.js} +34 -33
  91. package/core/built/admin/assets/ghost-ce50e3eb300a8e297d8b1f8b372c25d6.css +1 -0
  92. package/core/built/admin/assets/ghost-dark-4b969016a590f3112196d4ba3da7843a.css +1 -0
  93. package/core/built/admin/assets/koenig-lexical/index.css +1 -1
  94. package/core/built/admin/assets/koenig-lexical/koenig-lexical.js +16061 -15986
  95. package/core/built/admin/assets/koenig-lexical/koenig-lexical.umd.js +122 -124
  96. package/core/built/admin/assets/{vendor-232fd88c6ffbd896b34c449112793e93.js → vendor-104fd33edb243021ce2f1a3797d513ef.js} +4 -4
  97. package/core/built/admin/index.html +5 -5
  98. package/core/frontend/helpers/get.js +7 -5
  99. package/core/frontend/src/cards/css/bookmark.css +2 -0
  100. package/core/server/api/endpoints/utils/serializers/input/pages.js +32 -1
  101. package/core/server/api/endpoints/utils/serializers/input/posts.js +2 -2
  102. package/core/server/data/migrations/versions/5.87/2024-06-25-12-08-20-add-posts-tags-post-tag-index.js +26 -0
  103. package/core/server/data/migrations/versions/5.87/2024-06-25-12-08-45-add-posts-type-status-updated-at-index.js +4 -0
  104. package/core/server/data/schema/schema.js +7 -1
  105. package/core/server/models/base/plugins/crud.js +5 -0
  106. package/core/server/web/parent/app.js +1 -1
  107. package/package.json +151 -151
  108. package/yarn.lock +381 -359
  109. package/components/tryghost-adapter-cache-memory-ttl-5.86.1.tgz +0 -0
  110. package/components/tryghost-adapter-manager-5.86.1.tgz +0 -0
  111. package/components/tryghost-announcement-bar-settings-5.86.1.tgz +0 -0
  112. package/components/tryghost-api-version-compatibility-service-5.86.1.tgz +0 -0
  113. package/components/tryghost-audience-feedback-5.86.1.tgz +0 -0
  114. package/components/tryghost-bookshelf-repository-5.86.1.tgz +0 -0
  115. package/components/tryghost-bootstrap-socket-5.86.1.tgz +0 -0
  116. package/components/tryghost-collections-5.86.1.tgz +0 -0
  117. package/components/tryghost-constants-5.86.1.tgz +0 -0
  118. package/components/tryghost-custom-theme-settings-service-5.86.1.tgz +0 -0
  119. package/components/tryghost-donations-5.86.1.tgz +0 -0
  120. package/components/tryghost-dynamic-routing-events-5.86.1.tgz +0 -0
  121. package/components/tryghost-email-addresses-5.86.1.tgz +0 -0
  122. package/components/tryghost-email-analytics-provider-mailgun-5.86.1.tgz +0 -0
  123. package/components/tryghost-email-content-generator-5.86.1.tgz +0 -0
  124. package/components/tryghost-email-suppression-list-5.86.1.tgz +0 -0
  125. package/components/tryghost-express-dynamic-redirects-5.86.1.tgz +0 -0
  126. package/components/tryghost-external-media-inliner-5.86.1.tgz +0 -0
  127. package/components/tryghost-extract-api-key-5.86.1.tgz +0 -0
  128. package/components/tryghost-ghost-5.86.1.tgz +0 -0
  129. package/components/tryghost-html-to-plaintext-5.86.1.tgz +0 -0
  130. package/components/tryghost-i18n-5.86.1.tgz +0 -0
  131. package/components/tryghost-importer-revue-5.86.1.tgz +0 -0
  132. package/components/tryghost-in-memory-repository-5.86.1.tgz +0 -0
  133. package/components/tryghost-link-redirects-5.86.1.tgz +0 -0
  134. package/components/tryghost-link-replacer-5.86.1.tgz +0 -0
  135. package/components/tryghost-link-tracking-5.86.1.tgz +0 -0
  136. package/components/tryghost-member-attribution-5.86.1.tgz +0 -0
  137. package/components/tryghost-members-api-5.86.1.tgz +0 -0
  138. package/components/tryghost-members-csv-5.86.1.tgz +0 -0
  139. package/components/tryghost-members-events-service-5.86.1.tgz +0 -0
  140. package/components/tryghost-members-importer-5.86.1.tgz +0 -0
  141. package/components/tryghost-members-payments-5.86.1.tgz +0 -0
  142. package/components/tryghost-members-ssr-5.86.1.tgz +0 -0
  143. package/components/tryghost-mentions-email-report-5.86.1.tgz +0 -0
  144. package/components/tryghost-milestones-5.86.1.tgz +0 -0
  145. package/components/tryghost-minifier-5.86.1.tgz +0 -0
  146. package/components/tryghost-model-to-domain-event-interceptor-5.86.1.tgz +0 -0
  147. package/components/tryghost-mw-api-version-mismatch-5.86.1.tgz +0 -0
  148. package/components/tryghost-mw-cache-control-5.86.1.tgz +0 -0
  149. package/components/tryghost-mw-error-handler-5.86.1.tgz +0 -0
  150. package/components/tryghost-mw-session-from-token-5.86.1.tgz +0 -0
  151. package/components/tryghost-mw-update-user-last-seen-5.86.1.tgz +0 -0
  152. package/components/tryghost-mw-version-match-5.86.1.tgz +0 -0
  153. package/components/tryghost-mw-vhost-5.86.1.tgz +0 -0
  154. package/components/tryghost-oembed-service-5.86.1.tgz +0 -0
  155. package/components/tryghost-package-json-5.86.1.tgz +0 -0
  156. package/components/tryghost-post-events-5.86.1.tgz +0 -0
  157. package/components/tryghost-post-revisions-5.86.1.tgz +0 -0
  158. package/components/tryghost-posts-service-5.86.1.tgz +0 -0
  159. package/components/tryghost-recommendations-5.86.1.tgz +0 -0
  160. package/components/tryghost-referrers-5.86.1.tgz +0 -0
  161. package/components/tryghost-session-service-5.86.1.tgz +0 -0
  162. package/components/tryghost-settings-path-manager-5.86.1.tgz +0 -0
  163. package/components/tryghost-slack-notifications-5.86.1.tgz +0 -0
  164. package/components/tryghost-staff-service-5.86.1.tgz +0 -0
  165. package/components/tryghost-stats-service-5.86.1.tgz +0 -0
  166. package/components/tryghost-verification-trigger-5.86.1.tgz +0 -0
  167. package/components/tryghost-version-notifications-data-service-5.86.1.tgz +0 -0
  168. package/components/tryghost-webmentions-5.86.1.tgz +0 -0
  169. package/core/built/admin/assets/ghost-117facae643a21dde076079b84fce471.css +0 -1
  170. package/core/built/admin/assets/ghost-dark-031957661056b00048f03aac0618c480.css +0 -1
@@ -805,7 +805,7 @@ e.off("close",this,this.close),e.off("toggle",this,this.toggle),this.element.rem
805
805
  r!==n||i&&!t?i&&this.close():(a||(a=e.button,this.set("button",a)),this.open())}click(){if(super.click(...arguments),this.closeOnClick)return this.close()}},u=c(l.prototype,"dropdown",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c(l.prototype,"fadeIn",[s],Object.getOwnPropertyDescriptor(l.prototype,"fadeIn"),l.prototype),o=l))||o)||o)})),define("ghost-admin/components/gh-editor-feature-image",["exports","@glimmer/component","@tryghost/kg-clean-basic-html"],(function(e,t,i){var r,n,a,s,o,l,u,d,c,p,m,h,b,f,g,v,y,w,E,k,P,O,_,j,T,z,x
806
806
  function S(e,t,i,r){i&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(r):void 0})}function C(e,t,i,r,n){var a={}
807
807
  return Object.keys(r).forEach((function(e){a[e]=r[e]})),a.enumerable=!!a.enumerable,a.configurable=!!a.configurable,("value"in a||a.initializer)&&(a.writable=!0),a=i.slice().reverse().reduce((function(i,r){return r(e,t,i)||i}),a),n&&void 0!==a.initializer&&(a.value=a.initializer?a.initializer.call(n):void 0,a.initializer=void 0),void 0===a.initializer&&(Object.defineProperty(e,t,a),a=null),a}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
808
- const M=Ember.HTMLBars.template({id:"U2gotaaw",block:'{"symbols":["uploader","error","@isHidden","@alt","@image","@clearImage"],"statements":[[10,"div"],[14,0,"gh-editor-feature-image-container"],[12],[2,"\\n"],[2," "],[8,"gh-uploader",[],[["@extensions","@onComplete"],[[32,0,["imageExtensions"]],[32,0,["setUploadedImage"]]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,11],[[32,5]],null,[["default"],[{"statements":[[2," "],[11,"div"],[24,0,"gh-editor-feature-image-dropzone"],[4,[38,0],["dragover",[32,0,["dragOver"]]],null],[4,[38,0],["dragleave",[32,0,["dragLeave"]]],null],[4,[38,0],["drop",[30,[36,6],[[32,0,["drop"]],[32,1,["setFiles"]]],null]],null],[12],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,2],[[32,0,["canDrop"]]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-editor-feature-image-drop-indicator bg-green br-pill pe-none"],[12],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,2],[[32,1,["isUploading"]]],null,[["default","else"],[{"statements":[[2," "],[1,[32,1,["progressBar"]]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,2],[[32,1,["errors"]]],null,[["default","else"],[{"statements":[[6,[37,10],[[30,[36,9],[[30,[36,9],[[32,1,["errors"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-setting-error"],[14,"data-test-error","feature-image"],[12],[2,"\\n "],[1,[30,[36,8],[[32,2,["context"]],[32,2,["message"]]],null]],[2,"\\n "],[11,"button"],[24,0,"ml2 b"],[24,4,"button"],[4,[38,0],["click",[32,1,["cancel"]]],null],[12],[2,"Retry"],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[2]}]]]],"parameters":[]},{"statements":[[6,[37,2],[[32,5]],null,[["default","else"],[{"statements":[[6,[37,2],[[32,3]],null,[["default"],[{"statements":[[2," "],[10,"span"],[14,0,"gh-editor-hidden-indicator"],[14,"data-tooltip","Feature image and post title are hidden on page"],[12],[2,"\\n "],[1,[30,[36,1],["eye-closed"],null]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"div"],[14,0,"gh-editor-feature-image"],[12],[2,"\\n "],[10,"img"],[15,"src",[32,5]],[15,"alt",[32,4]],[15,"role",[30,[36,2],[[32,4],"img","presentation"],null]],[15,0,[31,[[30,[36,2],[[32,3],"faded"],null]]]],[12],[13],[2,"\\n "],[10,"div"],[14,0,"gh-editor-feature-image-overlay"],[12],[13],[2,"\\n "],[8,"koenig-image-editor",[],[["@imageSrc","@saveImage"],[[32,5],[30,[36,6],[[32,0,["saveImage"]],[32,1,["setFiles"]]],null]]],null],[2,"\\n "],[11,"button"],[24,0,"image-action image-delete"],[24,"title","Delete image"],[24,4,"button"],[4,[38,0],["click",[32,6]],null],[12],[2,"\\n "],[1,[30,[36,1],["koenig/kg-trash"],null]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"relative flex justify-between align-center"],[12],[2,"\\n"],[6,[37,2],[[32,0,["isEditingAlt"]]],null,[["default","else"],[{"statements":[[2," "],[11,"input"],[24,"placeholder","Add alt text to the feature image"],[16,0,[31,["gh-editor-feature-image-alttext ",[30,[36,2],[[32,3],"faded"],null]]]],[24,3,"alt"],[16,2,[32,4]],[24,"aria-label","Alt text for feature image"],[24,4,"text"],[4,[38,7],null,null],[4,[38,0],["input",[32,0,["onAltInput"]]],null],[12],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"koenig-lexical-editor-input",[[16,0,[31,["gh-editor-feature-image-caption ",[30,[36,2],[[30,[36,4],[[32,3],[30,[36,3],[[32,0,["captionInputFocused"]]],null]],null],"faded"],null]]]]],[["@html","@onChangeHtml","@placeholderText","@onFocus","@onBlur","@onTKCountChange","@registerAPI"],[[32,0,["caption"]],[32,0,["setCaption"]],[30,[36,2],[[32,0,["captionInputFocused"]],"","Add a caption to the feature image"],null],[30,[36,6],[[30,[36,5],[[32,0,["captionInputFocused"]]],null],true],null],[32,0,["handleCaptionBlur"]],[32,0,["onTKCountChange"]],[32,0,["registerEditorAPI"]]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "],[11,"button"],[24,"title","Toggle between editing alt text and caption"],[16,0,[31,["h-100 pl1 pr1 ba br3 f8 sans-serif fw4 lh-title tracked-2 ",[30,[36,2],[[32,0,["isEditingAlt"]],"bg-green b--green white","bg-white b--midlightgrey midlightgrey"],null]]]],[24,4,"button"],[4,[38,0],["click",[32,0,["toggleAltEditing"]]],[["passive"],[true]]],[12],[2,"\\n Alt\\n "],[13],[2,"\\n\\n"],[6,[37,2],[[30,[36,4],[[32,0,["tkCount"]],[30,[36,3],[[32,0,["isEditingAlt"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[11,"div"],[24,0,"tk-indicator"],[24,"data-testid","feature-image-tk-indicator"],[24,"role","button"],[4,[38,0],["click",[32,0,["focusCaptionEditor"]]],null],[12],[2,"\\n TK\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"div"],[14,0,"gh-editor-feature-image-add"],[12],[2,"\\n"],[6,[37,2],[[32,0,["canDrop"]]],null,[["default","else"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-editor-feature-image-add-button"],[12],[10,"span"],[12],[2,"Drop to upload feature image"],[13],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[11,"button"],[24,0,"gh-editor-feature-image-add-button"],[24,4,"button"],[4,[38,0],["click",[32,1,["triggerFileDialog"]]],null],[12],[1,[30,[36,1],["plus"],null]],[10,"span"],[12],[2,"Add feature image"],[13],[13],[2,"\\n"],[6,[37,2],[[32,0,["settings","unsplash"]]],null,[["default"],[{"statements":[[2," "],[11,"button"],[24,0,"gh-editor-feature-image-unsplash"],[24,4,"button"],[4,[38,0],["click",[32,0,["toggleUnsplashSelector"]]],null],[12],[1,[30,[36,1],["unsplash"],null]],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]],[2,"\\n "],[10,"div"],[14,5,"display:none"],[12],[2,"\\n "],[8,"gh-file-input",[[24,"data-test-file-input","feature-image"]],[["@multiple","@action","@accept","@onInsert"],[false,[32,1,["setFiles"]],[32,1,["imageMimeTypes"]],[32,1,["registerFileInput"]]]],null],[2,"\\n "],[13],[2,"\\n "]],"parameters":[1]}]]],[2,"\\n"],[13],[2,"\\n\\n"],[6,[37,2],[[32,0,["showUnsplashSelector"]]],null,[["default"],[{"statements":[[2," "],[8,"gh-unsplash",[],[["@select","@close"],[[32,0,["setUnsplashImage"]],[32,0,["toggleUnsplashSelector"]]]],null],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["on","svg-jar","if","not","and","mut","fn","autofocus","or","-track-array","each","unless"]}',moduleName:"ghost-admin/components/gh-editor-feature-image.hbs"})
808
+ const M=Ember.HTMLBars.template({id:"obCFn7QE",block:'{"symbols":["uploader","error","@isHidden","@alt","@image","@clearImage"],"statements":[[10,"div"],[14,0,"gh-editor-feature-image-container"],[12],[2,"\\n"],[2," "],[8,"gh-uploader",[],[["@extensions","@onComplete"],[[32,0,["imageExtensions"]],[32,0,["setUploadedImage"]]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,11],[[32,5]],null,[["default"],[{"statements":[[2," "],[11,"div"],[24,0,"gh-editor-feature-image-dropzone"],[4,[38,0],["dragover",[32,0,["dragOver"]]],null],[4,[38,0],["dragleave",[32,0,["dragLeave"]]],null],[4,[38,0],["drop",[30,[36,6],[[32,0,["drop"]],[32,1,["setFiles"]]],null]],null],[12],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,2],[[32,0,["canDrop"]]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-editor-feature-image-drop-indicator bg-green br-pill pe-none"],[12],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,2],[[32,1,["isUploading"]]],null,[["default","else"],[{"statements":[[2," "],[1,[32,1,["progressBar"]]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,2],[[32,1,["errors"]]],null,[["default","else"],[{"statements":[[6,[37,10],[[30,[36,9],[[30,[36,9],[[32,1,["errors"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-setting-error"],[14,"data-test-error","feature-image"],[12],[2,"\\n "],[1,[30,[36,8],[[32,2,["context"]],[32,2,["message"]]],null]],[2,"\\n "],[11,"button"],[24,0,"ml2 b"],[24,4,"button"],[4,[38,0],["click",[32,1,["cancel"]]],null],[12],[2,"Retry"],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[2]}]]]],"parameters":[]},{"statements":[[6,[37,2],[[32,5]],null,[["default","else"],[{"statements":[[6,[37,2],[[32,3]],null,[["default"],[{"statements":[[2," "],[10,"span"],[14,0,"gh-editor-hidden-indicator"],[14,"data-tooltip","Feature image and post title are hidden on page"],[12],[2,"\\n "],[1,[30,[36,1],["eye-closed"],null]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"div"],[14,0,"gh-editor-feature-image"],[12],[2,"\\n "],[10,"img"],[15,"src",[32,5]],[15,"alt",[32,4]],[15,"role",[30,[36,2],[[32,4],"img","presentation"],null]],[15,0,[31,[[30,[36,2],[[32,3],"faded"],null]]]],[12],[13],[2,"\\n "],[10,"div"],[14,0,"gh-editor-feature-image-overlay"],[12],[13],[2,"\\n "],[8,"koenig-image-editor",[],[["@imageSrc","@saveImage"],[[32,5],[30,[36,6],[[32,0,["saveImage"]],[32,1,["setFiles"]]],null]]],null],[2,"\\n "],[11,"button"],[24,0,"image-action image-delete"],[24,"data-tooltip","Delete"],[24,4,"button"],[4,[38,0],["click",[32,6]],null],[12],[2,"\\n "],[1,[30,[36,1],["koenig/kg-trash"],null]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"relative flex justify-between align-center"],[12],[2,"\\n"],[6,[37,2],[[32,0,["isEditingAlt"]]],null,[["default","else"],[{"statements":[[2," "],[11,"input"],[24,"placeholder","Add alt text to the feature image"],[16,0,[31,["gh-editor-feature-image-alttext ",[30,[36,2],[[32,3],"faded"],null]]]],[24,3,"alt"],[16,2,[32,4]],[24,"aria-label","Alt text for feature image"],[24,4,"text"],[4,[38,7],null,null],[4,[38,0],["input",[32,0,["onAltInput"]]],null],[12],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"koenig-lexical-editor-input",[[16,0,[31,["gh-editor-feature-image-caption ",[30,[36,2],[[30,[36,4],[[32,3],[30,[36,3],[[32,0,["captionInputFocused"]]],null]],null],"faded"],null]]]]],[["@html","@onChangeHtml","@placeholderText","@onFocus","@onBlur","@onTKCountChange","@registerAPI"],[[32,0,["caption"]],[32,0,["setCaption"]],[30,[36,2],[[32,0,["captionInputFocused"]],"","Add a caption to the feature image"],null],[30,[36,6],[[30,[36,5],[[32,0,["captionInputFocused"]]],null],true],null],[32,0,["handleCaptionBlur"]],[32,0,["onTKCountChange"]],[32,0,["registerEditorAPI"]]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "],[11,"button"],[24,"title","Toggle between editing alt text and caption"],[16,0,[31,["h-100 pl1 pr1 ba br3 f8 sans-serif fw4 lh-title tracked-2 ",[30,[36,2],[[32,0,["isEditingAlt"]],"bg-green b--green white","bg-white b--midlightgrey midlightgrey"],null]]]],[24,4,"button"],[4,[38,0],["click",[32,0,["toggleAltEditing"]]],[["passive"],[true]]],[12],[2,"\\n Alt\\n "],[13],[2,"\\n\\n"],[6,[37,2],[[30,[36,4],[[32,0,["tkCount"]],[30,[36,3],[[32,0,["isEditingAlt"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[11,"div"],[24,0,"tk-indicator"],[24,"data-testid","feature-image-tk-indicator"],[24,"role","button"],[4,[38,0],["click",[32,0,["focusCaptionEditor"]]],null],[12],[2,"\\n TK\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"div"],[14,0,"gh-editor-feature-image-add"],[12],[2,"\\n"],[6,[37,2],[[32,0,["canDrop"]]],null,[["default","else"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-editor-feature-image-add-button"],[12],[10,"span"],[12],[2,"Drop to upload feature image"],[13],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[11,"button"],[24,0,"gh-editor-feature-image-add-button"],[24,4,"button"],[4,[38,0],["click",[32,1,["triggerFileDialog"]]],null],[12],[1,[30,[36,1],["plus"],null]],[10,"span"],[12],[2,"Add feature image"],[13],[13],[2,"\\n"],[6,[37,2],[[32,0,["settings","unsplash"]]],null,[["default"],[{"statements":[[2," "],[11,"button"],[24,0,"gh-editor-feature-image-unsplash"],[24,4,"button"],[4,[38,0],["click",[32,0,["toggleUnsplashSelector"]]],null],[12],[1,[30,[36,1],["unsplash"],null]],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]],[2,"\\n "],[10,"div"],[14,5,"display:none"],[12],[2,"\\n "],[8,"gh-file-input",[[24,"data-test-file-input","feature-image"]],[["@multiple","@action","@accept","@onInsert"],[false,[32,1,["setFiles"]],[32,1,["imageMimeTypes"]],[32,1,["registerFileInput"]]]],null],[2,"\\n "],[13],[2,"\\n "]],"parameters":[1]}]]],[2,"\\n"],[13],[2,"\\n\\n"],[6,[37,2],[[32,0,["showUnsplashSelector"]]],null,[["default"],[{"statements":[[2," "],[8,"gh-unsplash",[],[["@select","@close"],[[32,0,["setUnsplashImage"]],[32,0,["toggleUnsplashSelector"]]]],null],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["on","svg-jar","if","not","and","mut","fn","autofocus","or","-track-array","each","unless"]}',moduleName:"ghost-admin/components/gh-editor-feature-image.hbs"})
809
809
  let D=e.default=(r=Ember.inject.service,n=Ember._tracked,a=Ember._tracked,s=Ember._tracked,o=Ember._tracked,l=Ember._tracked,u=Ember._action,d=Ember._action,c=Ember._action,p=Ember._action,m=Ember._action,h=Ember._action,b=Ember._action,f=Ember._action,g=Ember._action,v=Ember._action,y=Ember._action,w=Ember._action,E=Ember._action,k=Ember._action,P=class extends t.default{constructor(...e){super(...e),S(this,"settings",O,this),S(this,"isEditingAlt",_,this),S(this,"captionInputFocused",j,this),S(this,"showUnsplashSelector",T,this),S(this,"canDrop",z,this),S(this,"tkCount",x,this)}get caption(){const e=this.args.caption
810
810
  return e?function(e){const t=(new DOMParser).parseFromString(e,"text/html")
811
811
  return"P"===t.body?.firstElementChild?.tagName}(e)?e:`<p>${e}</p>`:null}setCaption(e){const t=(0,i.default)(e||"",{firstChildInnerContent:!0})
@@ -967,7 +967,7 @@ document.execCommand("insertText",!1,i)}focusTitle(){this.titleElement.focus()}o
967
967
  if("Enter"===t&&(e.preventDefault(),this.excerptElement?.focus()),("ArrowDown"===t||"ArrowRight"===t)&&!e.shiftKey){(!i||r===i.length)&&(e.preventDefault(),this.excerptElement?.focus())}}else{const{editorAPI:t}=this
968
968
  if(!t||e.originalEvent.isComposing)return
969
969
  const{key:i}=e,{value:r,selectionStart:n}=e.target,a=!r||n===r.length,s=["ArrowDown","ArrowRight"].includes(i)&&a;("Enter"===i||"Tab"===i||s)&&(e.preventDefault(),"Enter"!==i||t.editorIsEmpty()?t.focusEditor({position:"top"}):t.insertParagraphAtTop({focus:!0}))}}registerExcerptElement(e){this.excerptElement=e}focusExcerpt(){this.excerptElement?.focus(),setTimeout((()=>{this.excerptElement?.setSelectionRange(-1,-1)}),0)}onExcerptInput(e){this.args.setExcerpt?.(e.target.value)}onExcerptKeydown(e){const{key:t}=e,{value:i,selectionStart:r}=e.target
970
- if(("ArrowUp"===t||"ArrowLeft"===t)&&!e.shiftKey){(!i||0===r)&&(e.preventDefault(),this.focusTitle())}const{editorAPI:n}=this,a=!i||r===i.length,s=("ArrowRight"===t||"ArrowDown"===t)&&a;("Enter"===t||"Tab"===t&&!e.shiftKey||s)&&(e.preventDefault(),"Enter"!==t||n.editorIsEmpty()?n.focusEditor({position:"top"}):n.insertParagraphAtTop({focus:!0}))}registerEditorAPI(e){this.editorAPI=e,this.args.registerAPI(e)}focusEditor(e){if(!this.skipFocusEditor&&e.target.classList.contains("gh-koenig-editor-pane")){let t=this.editorAPI.editorInstance.getRootElement(),{bottom:i}=t.getBoundingClientRect()
970
+ if(("ArrowUp"===t||"ArrowLeft"===t)&&!e.shiftKey){(!i||0===r)&&(e.preventDefault(),this.focusTitle())}const{editorAPI:n}=this,a=!i||r===i.length,s=("ArrowRight"===t||"ArrowDown"===t)&&a;("Enter"===t||"Tab"===t&&!e.shiftKey||s)&&(e.preventDefault(),"Enter"!==t||n.editorIsEmpty()?n.focusEditor({position:"top"}):n.insertParagraphAtTop({focus:!0}))}registerEditorAPI(e){this.editorAPI=e,this.args.registerAPI(e)}focusEditor(e){if(!this.skipFocusEditor&&e.target.classList.contains("gh-koenig-editor-pane")&&this.editorAPI){let t=this.editorAPI.editorInstance.getRootElement(),{bottom:i}=t.getBoundingClientRect()
971
971
  e.pageY>i&&e.clientY>i&&(e.preventDefault(),this.editorAPI.lastNodeIsDecorator()&&this.editorAPI.insertParagraphAtBottom(),this.editorAPI.focusEditor({position:"bottom"}))}this.skipFocusEditor=!1}},P=x(k.prototype,"settings",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=x(k.prototype,"feature",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=x(k.prototype,"titleIsHovered",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),j=x(k.prototype,"titleIsFocused",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),x(k.prototype,"registerElement",[o],Object.getOwnPropertyDescriptor(k.prototype,"registerElement"),k.prototype),x(k.prototype,"trackMousedown",[l],Object.getOwnPropertyDescriptor(k.prototype,"trackMousedown"),k.prototype),x(k.prototype,"editorPaneDragover",[u],Object.getOwnPropertyDescriptor(k.prototype,"editorPaneDragover"),k.prototype),x(k.prototype,"editorPaneDrop",[d],Object.getOwnPropertyDescriptor(k.prototype,"editorPaneDrop"),k.prototype),x(k.prototype,"registerTitleElement",[c],Object.getOwnPropertyDescriptor(k.prototype,"registerTitleElement"),k.prototype),x(k.prototype,"updateTitle",[p],Object.getOwnPropertyDescriptor(k.prototype,"updateTitle"),k.prototype),x(k.prototype,"cleanPastedTitle",[m],Object.getOwnPropertyDescriptor(k.prototype,"cleanPastedTitle"),k.prototype),x(k.prototype,"focusTitle",[h],Object.getOwnPropertyDescriptor(k.prototype,"focusTitle"),k.prototype),x(k.prototype,"onTitleKeydown",[b],Object.getOwnPropertyDescriptor(k.prototype,"onTitleKeydown"),k.prototype),x(k.prototype,"registerExcerptElement",[f],Object.getOwnPropertyDescriptor(k.prototype,"registerExcerptElement"),k.prototype),x(k.prototype,"focusExcerpt",[g],Object.getOwnPropertyDescriptor(k.prototype,"focusExcerpt"),k.prototype),x(k.prototype,"onExcerptInput",[v],Object.getOwnPropertyDescriptor(k.prototype,"onExcerptInput"),k.prototype),x(k.prototype,"onExcerptKeydown",[y],Object.getOwnPropertyDescriptor(k.prototype,"onExcerptKeydown"),k.prototype),x(k.prototype,"registerEditorAPI",[w],Object.getOwnPropertyDescriptor(k.prototype,"registerEditorAPI"),k.prototype),x(k.prototype,"focusEditor",[E],Object.getOwnPropertyDescriptor(k.prototype,"focusEditor"),k.prototype),k)
972
972
  Ember._setComponentTemplate(S,C)})),define("ghost-admin/components/gh-link-to-custom-views-index",["exports","@glimmer/component"],(function(e,t){var i,r,n,a,s,o,l,u
973
973
  function d(e,t,i,r){i&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(r):void 0})}function c(e,t,i){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e
@@ -1578,7 +1578,7 @@ const t=Ember.HTMLBars.template({id:"XHJyi8Hh",block:'{"symbols":["@label","&def
1578
1578
  e.default=Ember._setComponentTemplate(t,Ember._templateOnlyComponent())})),define("ghost-admin/components/koenig-image-editor",["exports","@glimmer/component","ghost-admin/decorators/inject","ghost-admin/utils/analytics"],(function(e,t,i,r){var n,a,s,o,l,u,d,c,p,m,h,b,f,g,v,y,w,E,k,P
1579
1579
  function O(e,t,i,r){i&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(r):void 0})}function _(e,t,i,r,n){var a={}
1580
1580
  return Object.keys(r).forEach((function(e){a[e]=r[e]})),a.enumerable=!!a.enumerable,a.configurable=!!a.configurable,("value"in a||a.initializer)&&(a.writable=!0),a=i.slice().reverse().reduce((function(i,r){return r(e,t,i)||i}),a),n&&void 0!==a.initializer&&(a.value=a.initializer?a.initializer.call(n):void 0,a.initializer=void 0),void 0===a.initializer&&(Object.defineProperty(e,t,a),a=null),a}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
1581
- const j=Ember.HTMLBars.template({id:"xaMALYei",block:'{"symbols":["uploader","@className"],"statements":[[6,[37,0],[[32,0,["isEditorEnabled"]]],null,[["default"],[{"statements":[[2," "],[8,"gh-uploader",[],[["@onComplete"],[[32,0,["onUploadComplete"]]]],[["default"],[{"statements":[[2,"\\n "],[11,"button"],[16,0,[31,[[30,[36,0],[[32,2],[32,2],"image-action image-edit"],null]]]],[24,"title","Edit image"],[24,4,"button"],[4,[38,2],["click",[30,[36,1],[[32,0,["handleClick"]],[32,1]],null]],null],[12],[2,"\\n "],[1,[30,[36,3],["koenig/kg-edit"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[1]}]]],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["if","fn","on","svg-jar"]}',moduleName:"ghost-admin/components/koenig-image-editor.hbs"})
1581
+ const j=Ember.HTMLBars.template({id:"BlwffCAC",block:'{"symbols":["uploader","@className"],"statements":[[6,[37,0],[[32,0,["isEditorEnabled"]]],null,[["default"],[{"statements":[[2," "],[8,"gh-uploader",[],[["@onComplete"],[[32,0,["onUploadComplete"]]]],[["default"],[{"statements":[[2,"\\n "],[11,"button"],[16,0,[31,[[30,[36,0],[[32,2],[32,2],"image-action image-edit"],null]]]],[24,"data-tooltip","Edit"],[24,4,"button"],[4,[38,2],["click",[30,[36,1],[[32,0,["handleClick"]],[32,1]],null]],null],[12],[2,"\\n "],[1,[30,[36,3],["koenig/kg-wand"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[1]}]]],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["if","fn","on","svg-jar"]}',moduleName:"ghost-admin/components/koenig-image-editor.hbs"})
1582
1582
  let T=e.default=(n=Ember.inject.service,a=Ember.inject.service,s=Ember.inject.service,o=Ember.inject.service,l=Ember._tracked,u=Ember._tracked,d=Ember._tracked,c=Ember._action,p=Ember._action,m=Ember._action,h=Ember._action,b=class extends t.default{get isEditorEnabled(){return this.scriptLoaded&&this.cssLoaded}get pinturaJsUrl(){return this.settings.pintura?this.config.pintura?.js||this.settings.pinturaJsUrl:null}get pinturaCSSUrl(){return this.settings.pintura?this.config.pintura?.css||this.settings.pinturaCssUrl:null}getImageEditorJSUrl(){let e=this.pinturaJsUrl
1583
1583
  return e?(e.startsWith("/")&&(e=window.location.origin+this.ghostPaths.adminRoot.replace(/\/$/,"")+e),e):null}getImageEditorCSSUrl(){let e=this.pinturaCSSUrl
1584
1584
  return e?(e.startsWith("/")&&(e=window.location.origin+this.ghostPaths.adminRoot.replace(/\/$/,"")+e),e):null}loadImageEditorJavascript(){const e=this.getImageEditorJSUrl()
@@ -1637,13 +1637,13 @@ const i=await(0,n.default)(t.toString()),{posts:r}=await i.json()
1637
1637
  return r},fetchEmbed:async(e,{type:t})=>{let i=this.ghostPaths.url.api("oembed")
1638
1638
  return await this.ajax.request(i,{data:{url:e,type:t}})},fetchLabels:async()=>{let e=[]
1639
1639
  try{e=await this.fetchLabelsTask.perform()}catch(t){if((0,o.didCancel)(t))return
1640
- throw t}return e.map((e=>e.name))},feature:{collectionsCard:this.feature.collectionsCard,collections:this.feature.collections,internalLinking:this.feature.internalLinking,internalLinkingAtLinks:this.feature.internalLinking,contentVisibility:this.feature.contentVisibility},deprecated:{headerV1:!0},membersEnabled:"all"===this.settings.membersSignupAccess,searchLinks:async e=>{if(!e){if(this.defaultLinks)return this.defaultLinks
1640
+ throw t}return e.map((e=>e.name))},renderLabels:!this.session.user.isContributor,feature:{collectionsCard:this.feature.collectionsCard,collections:this.feature.collections,internalLinking:this.feature.internalLinking,internalLinkingAtLinks:this.feature.internalLinking,contentVisibility:this.feature.contentVisibility},deprecated:{headerV1:!0},membersEnabled:"all"===this.settings.membersSignupAccess,searchLinks:async e=>{if(!e){if(this.defaultLinks)return this.defaultLinks
1641
1641
  const e=(await this.store.query("post",{filter:"status:published",fields:"id,url,title,visibility,published_at",order:"published_at desc",limit:5})).toArray().map((e=>({groupName:"Latest posts",id:e.id,title:e.title,url:e.url,visibility:e.visibility,publishedAt:e.publishedAtUTC.toISOString()})))
1642
1642
  return e.forEach((e=>U(e,this.settings))),this.defaultLinks=[{label:"Latest posts",items:e}],this.defaultLinks}let t=[]
1643
1643
  try{t=await this.search.searchTask.perform(e)}catch(r){if(!(0,o.didCancel)(r))throw r
1644
1644
  return}const i=[]
1645
1645
  return t.forEach((e=>{let t=e.options
1646
- "Posts"!==e.groupName&&"Pages"!==e.groupName||(t=t.filter((e=>"published"===e.status))),"Staff"===e.groupName&&(t=t.filter((e=>!/\/404\//.test(e.url)))),0!==t.length&&("Posts"!==e.groupName&&"Pages"!==e.groupName||t.forEach((e=>U(e,this.settings))),i.push({label:e.groupName,items:t}))})),i},siteTitle:this.settings.title,siteDescription:this.settings.description},s=Object.assign({},i,e.cardConfig,{pinturaConfig:this.pinturaConfig}),l=this.feature.lexicalMultiplayer&&!s.post.isNew,u=("https:"===window.location.protocol?"wss:":"ws:")+window.location.host+this.ghostPaths.url.api("posts","multiplayer"),d=s.post.id,c=this.session.user.name
1646
+ "Posts"!==e.groupName&&"Pages"!==e.groupName||(t=t.filter((e=>"published"===e.status))),"Staff"===e.groupName&&(t=t.filter((e=>!/\/404\//.test(e.url)))),0!==t.length&&("Posts"!==e.groupName&&"Pages"!==e.groupName||t.forEach((e=>U(e,this.settings))),i.push({label:e.groupName,items:t}))})),i},siteTitle:this.settings.title,siteDescription:this.settings.description,siteUrl:this.config.getSiteUrl("/")},s=Object.assign({},i,e.cardConfig,{pinturaConfig:this.pinturaConfig}),l=this.feature.lexicalMultiplayer&&!s.post.isNew,u=("https:"===window.location.protocol?"wss:":"ws:")+window.location.host+this.ghostPaths.url.api("posts","multiplayer"),d=s.post.id,c=this.session.user.name
1647
1647
  return r.default.createElement("div",{className:["koenig-react-editor","koenig-lexical",this.args.className].filter(Boolean).join(" ")},r.default.createElement(H,{config:this.config},r.default.createElement(r.Suspense,{fallback:r.default.createElement("p",{className:"koenig-react-editor-loading"},"Loading editor...")},r.default.createElement(V,{editorResource:this.editorResource,cardConfig:s,enableMultiplayer:l,fileUploader:{useFileUpload:(e="image")=>{const[t,i]=r.default.useState(0),[n,s]=r.default.useState(!1),[o,l]=r.default.useState([]),[u,d]=r.default.useState(0),c=r.default.useRef(new Map)
1648
1648
  function p(){if(0===c.current.size)return void i(0)
1649
1649
  let e=0
@@ -3422,8 +3422,8 @@ if((0,h.isNotFoundError)(e)){t&&t.abort()
3422
3422
  let e=t.to,i=this.router,r=[]
3423
3423
  for(let t of Object.keys(e.params))r.push(e.params[t])
3424
3424
  let n=i.urlFor(e.name,...r).replace(/^#\//,"").replace(/^\//,"").replace(/^ghost\//,"")
3425
- return this.replaceWith("error404",n)}return(!(0,b.isVersionMismatchError)(e)||(t&&t.abort(),this.upgradeStatus.requireUpgrade(),!this._appLoaded))&&((!(0,b.isMaintenanceError)(e)||(t&&t.abort(),this.upgradeStatus.maintenanceAlert(),!this._appLoaded))&&!(((0,h.isAjaxError)(e)||e&&e.payload&&Ember.isArray(e.payload.errors))&&(this.notifications.showAPIError(e),!t)))}},willDestroy(){this.ui.cleanupBodyDragHandlers()},async prepareApp(){if(await this.configManager.fetchUnauthenticated(),this.config.sentry_dsn){const i={dsn:this.config.sentry_dsn,environment:this.config.sentry_env,release:`ghost@${this.config.version}`,beforeSend:c.beforeSend,ignoreErrors:[/^TransitionAborted$/,/^ResizeObserver loop completed with undelivered notifications/,/^ResizeObserver loop limit exceeded/,"TaskCancelation"],integrations:[]}
3426
- try{i.replaysOnErrorSampleRate=1,i.integrations.push(new d.Replay({mask:[".koenig-lexical",".gh-dashboard"],unmask:['[role="menu"]','[data-testid="settings-panel"]',".gh-nav"],maskAllText:!1,maskAllInputs:!0,blockAllMedia:!0}))}catch(e){console.error("Error enabling Sentry Replay:",e)}"development"===this.config.sentry_env&&i.integrations.push(new u.Debug),t.init(i)}if(this.session.isAuthenticated){try{await this.session.populateUser()}catch(e){await this.session.invalidate()}await this.session.postAuthPreparation()}this.config.hostSettings?.forceUpgrade&&this.billing.openBillingWindow(this.router.currentURL,"/pro"),setTimeout((()=>{(0,p.importComponent)(i.default.packageName)}),1e3)}})})),define("ghost-admin/routes/authenticated",["exports"],(function(e){var t,i,r
3425
+ return this.replaceWith("error404",n)}return(!(0,b.isVersionMismatchError)(e)||(t&&t.abort(),this.upgradeStatus.requireUpgrade(),!this._appLoaded))&&((!(0,b.isMaintenanceError)(e)||(t&&t.abort(),this.upgradeStatus.maintenanceAlert(),!this._appLoaded))&&!(((0,h.isAjaxError)(e)||e&&e.payload&&Ember.isArray(e.payload.errors))&&(this.notifications.showAPIError(e),!t)))}},willDestroy(){this.ui.cleanupBodyDragHandlers()},async prepareApp(){if(await this.configManager.fetchUnauthenticated(),this.config.sentry_dsn){const i={dsn:this.config.sentry_dsn,environment:this.config.sentry_env,release:`ghost@${this.config.version}`,beforeSend:c.beforeSend,ignoreErrors:[/The play() request was interrupted/,/The request is not allowed by the user agent or the platform in the current context/,/Server was unreachable/,/NetworkError when attempting to fetch resource./,/Failed to fetch/,/Load failed/,/The operation was aborted./,/^TransitionAborted$/,/^ResizeObserver loop completed with undelivered notifications/,/^ResizeObserver loop limit exceeded/,"TaskCancelation"],integrations:[]}
3426
+ try{i.replaysOnErrorSampleRate=.5,i.integrations.push(new d.Replay({mask:[".koenig-lexical",".gh-dashboard"],unmask:['[role="menu"]','[data-testid="settings-panel"]',".gh-nav"],maskAllText:!1,maskAllInputs:!0,blockAllMedia:!0}))}catch(e){console.error("Error enabling Sentry Replay:",e)}"development"===this.config.sentry_env&&i.integrations.push(new u.Debug),t.init(i)}if(this.session.isAuthenticated){try{await this.session.populateUser()}catch(e){await this.session.invalidate()}await this.session.postAuthPreparation()}this.config.hostSettings?.forceUpgrade&&this.billing.openBillingWindow(this.router.currentURL,"/pro"),setTimeout((()=>{(0,p.importComponent)(i.default.packageName)}),1e3)}})})),define("ghost-admin/routes/authenticated",["exports"],(function(e){var t,i,r
3427
3427
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
3428
3428
  e.default=(t=Ember.inject.service,i=class extends Ember.Route{constructor(...e){var t,i,n,a
3429
3429
  super(...e),t=this,i="session",a=this,(n=r)&&Object.defineProperty(t,i,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(a):void 0})}async beforeModel(e){this.session.requireAuthentication(e,"signin")}},n=i.prototype,a="session",s=[t],o={configurable:!0,enumerable:!0,writable:!0,initializer:null},u={},Object.keys(o).forEach((function(e){u[e]=o[e]})),u.enumerable=!!u.enumerable,u.configurable=!!u.configurable,("value"in u||u.initializer)&&(u.writable=!0),u=s.slice().reverse().reduce((function(e,t){return t(n,a,e)||e}),u),l&&void 0!==u.initializer&&(u.value=u.initializer?u.initializer.call(l):void 0,u.initializer=void 0),void 0===u.initializer&&(Object.defineProperty(n,a,u),u=null),r=u,i)
@@ -3966,15 +3966,15 @@ const y=!0,w=!0,E=!1,k=!0
3966
3966
  !0||(v=v.slice(0,5)),E||(this.memberAttributionStats.push({date:e.toISOString().split("T")[0],source:v[Math.floor(Math.random()*v.length)],signups:w?Math.floor(50*Math.random()):0,paidConversions:y?Math.floor(30*Math.random()):0}),k&&this.memberAttributionStats.push({date:e.toISOString().split("T")[0],source:null,signups:w?Math.floor(5*Math.random()):0,paidConversions:y?Math.floor(3*Math.random()):0}))}0===r.length&&r.push({date:(new Date).toISOString().split("T")[0],free:0,paid:0,comped:0,paidSubscribed:0,paidCanceled:0}),this.memberCountStats=r,this.subscriptionCountStats=r.map((e=>{const t=e.paidSubscribed-e.paidCanceled
3967
3967
  return{date:e.date,count:e.paid,positiveDelta:e.paidSubscribed,negativeDelta:e.paidCanceled,signups:t<0?0:t,cancellations:Math.floor(.3*t)?Math.floor(.3*t):0}}))
3968
3968
  const d=r[r.length-1],c=(d.paid,d.free,d.comped,d.paid),p=d.free+d.comped,m=Math.random()
3969
- this.paidMembersByCadence={year:Math.floor(c*m),month:Math.floor(c*(1-m))},this.paidMembersByTier=[{tier:{name:"Bronze tier"},members:Math.floor(.6*c)},{tier:{name:"Silver tier"},members:Math.floor(.25*c)},{tier:{name:"Gold tier"},members:Math.floor(.15*c)}],this.newsletterSubscribers={paid:Math.floor(.9*c),free:Math.floor(.5*p),total:Math.floor(.9*c)+Math.floor(.5*p)},this.emailsSent30d=Math.floor(123*e/90),this.membersLastSeen7d=Math.round(Math.random()*p/2),this.membersLastSeen30d=this.membersLastSeen7d+Math.round(Math.random()*p/2),this.emailOpenRateStats=[],e>=7&&this.emailOpenRateStats.push({subject:"💸 The best way to get paid to create",openRate:58,submittedAt:new Date}),e>=28&&this.emailOpenRateStats.push({subject:"🎒How to start a blog and make money",openRate:42,submittedAt:new Date},{subject:"How to turn your amateur blogging into a real business",openRate:89,submittedAt:new Date},{subject:"💸 The best way to get paid to create",openRate:58,submittedAt:new Date}),e>=40&&this.emailOpenRateStats.push({subject:"🎒How to start a blog and make money",openRate:42,submittedAt:new Date},{subject:"How to turn your amateur blogging into a real business",openRate:70,submittedAt:new Date},{subject:"🎒How to start a blog and make money",openRate:90,submittedAt:new Date},{subject:"How to turn your amateur blogging into a real business",openRate:89,submittedAt:new Date}),this.mrrStats=r.map((e=>({date:e.date,mrr:501*e.tier1+2500*e.tier2,currency:"usd"})))}},h=T(m.prototype,"enabled",[t],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),b=T(m.prototype,"generateDays",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return 30}}),f=T(m.prototype,"siteStatus",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),g=T(m.prototype,"memberCountStats",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),v=T(m.prototype,"mrrStats",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),y=T(m.prototype,"paidMembersByCadence",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),w=T(m.prototype,"paidMembersByTier",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),E=T(m.prototype,"membersLastSeen30d",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),k=T(m.prototype,"membersLastSeen7d",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),P=T(m.prototype,"newsletterSubscribers",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),O=T(m.prototype,"emailsSent30d",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),_=T(m.prototype,"emailOpenRateStats",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),m)})),define("ghost-admin/services/dashboard-stats",["exports","moment-timezone","ember-concurrency"],(function(e,t,i){var r,n,a,s,o,l,u,d,c,p,m,h,b,f,g,v,y,w,E,k,P,O,_,j,T,z,x,S,C,M,D,A,L,I,N,R,F,U,B,H,V,q,$,Y,W
3970
- function G(e,t,i,r){i&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(r):void 0})}function K(e,t,i){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e
3969
+ this.paidMembersByCadence={year:Math.floor(c*m),month:Math.floor(c*(1-m))},this.paidMembersByTier=[{tier:{name:"Bronze tier"},members:Math.floor(.6*c)},{tier:{name:"Silver tier"},members:Math.floor(.25*c)},{tier:{name:"Gold tier"},members:Math.floor(.15*c)}],this.newsletterSubscribers={paid:Math.floor(.9*c),free:Math.floor(.5*p),total:Math.floor(.9*c)+Math.floor(.5*p)},this.emailsSent30d=Math.floor(123*e/90),this.membersLastSeen7d=Math.round(Math.random()*p/2),this.membersLastSeen30d=this.membersLastSeen7d+Math.round(Math.random()*p/2),this.emailOpenRateStats=[],e>=7&&this.emailOpenRateStats.push({subject:"💸 The best way to get paid to create",openRate:58,submittedAt:new Date}),e>=28&&this.emailOpenRateStats.push({subject:"🎒How to start a blog and make money",openRate:42,submittedAt:new Date},{subject:"How to turn your amateur blogging into a real business",openRate:89,submittedAt:new Date},{subject:"💸 The best way to get paid to create",openRate:58,submittedAt:new Date}),e>=40&&this.emailOpenRateStats.push({subject:"🎒How to start a blog and make money",openRate:42,submittedAt:new Date},{subject:"How to turn your amateur blogging into a real business",openRate:70,submittedAt:new Date},{subject:"🎒How to start a blog and make money",openRate:90,submittedAt:new Date},{subject:"How to turn your amateur blogging into a real business",openRate:89,submittedAt:new Date}),this.mrrStats=r.map((e=>({date:e.date,mrr:501*e.tier1+2500*e.tier2,currency:"usd"})))}},h=T(m.prototype,"enabled",[t],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),b=T(m.prototype,"generateDays",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return 30}}),f=T(m.prototype,"siteStatus",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),g=T(m.prototype,"memberCountStats",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),v=T(m.prototype,"mrrStats",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),y=T(m.prototype,"paidMembersByCadence",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),w=T(m.prototype,"paidMembersByTier",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),E=T(m.prototype,"membersLastSeen30d",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),k=T(m.prototype,"membersLastSeen7d",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),P=T(m.prototype,"newsletterSubscribers",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),O=T(m.prototype,"emailsSent30d",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),_=T(m.prototype,"emailOpenRateStats",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),m)})),define("ghost-admin/services/dashboard-stats",["exports","moment-timezone","ember-concurrency","ghost-admin/utils/merge-stats-by-date"],(function(e,t,i,r){var n,a,s,o,l,u,d,c,p,m,h,b,f,g,v,y,w,E,k,P,O,_,j,T,z,x,S,C,M,D,A,L,I,N,R,F,U,B,H,V,q,$,Y,W,G
3970
+ function K(e,t,i,r){i&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(r):void 0})}function J(e,t,i){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e
3971
3971
  var i=e[Symbol.toPrimitive]
3972
3972
  if(void 0!==i){var r=i.call(e,t||"default")
3973
3973
  if("object"!=typeof r)return r
3974
3974
  throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string")
3975
- return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function J(e,t,i,r,n){var a={}
3975
+ return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function X(e,t,i,r,n){var a={}
3976
3976
  return Object.keys(r).forEach((function(e){a[e]=r[e]})),a.enumerable=!!a.enumerable,a.configurable=!!a.configurable,("value"in a||a.initializer)&&(a.writable=!0),a=i.slice().reverse().reduce((function(i,r){return r(e,t,i)||i}),a),n&&void 0!==a.initializer&&(a.value=a.initializer?a.initializer.call(n):void 0,a.initializer=void 0),void 0===a.initializer&&(Object.defineProperty(e,t,a),a=null),a}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
3977
- e.default=(r=Ember.inject.service,n=Ember.inject.service,a=Ember.inject.service,s=Ember.inject.service,o=Ember.inject.service,l=Ember.inject.service,u=Ember.inject.service,d=Ember.inject.service,c=Ember._tracked,p=Ember._tracked,m=Ember._tracked,h=Ember._tracked,b=Ember._tracked,f=Ember._tracked,g=Ember._tracked,v=Ember._tracked,y=Ember._tracked,w=Ember._tracked,E=Ember._tracked,k=Ember._tracked,P=Ember._tracked,O=Ember._tracked,_=class extends Ember.Service{constructor(...e){super(...e),G(this,"dashboardMocks",j,this),G(this,"store",T,this),G(this,"ajax",z,this),G(this,"ghostPaths",x,this),G(this,"membersCountCache",S,this),G(this,"settings",C,this),G(this,"membersUtils",M,this),G(this,"membersStats",D,this),G(this,"siteStatus",A,this),G(this,"memberCountStats",L,this),G(this,"subscriptionCountStats",I,this),G(this,"mrrStats",N,this),G(this,"paidMembersByCadence",R,this),G(this,"paidMembersByTier",F,this),G(this,"membersLastSeen30d",U,this),G(this,"memberAttributionStats",B,this),G(this,"membersLastSeen7d",H,this),G(this,"newsletterSubscribers",V,this),G(this,"emailsSent30d",q,this),G(this,"emailOpenRateStats",$,this),G(this,"chartDays",Y,this),G(this,"lastSeenFilterStatus",W,this),K(this,"paidTiers",null)}get activePaidTiers(){return this.paidTiers?this.paidTiers.filter((e=>e.active)):null}get memberCounts(){if(!this.memberCountStats)return null
3977
+ e.default=(n=Ember.inject.service,a=Ember.inject.service,s=Ember.inject.service,o=Ember.inject.service,l=Ember.inject.service,u=Ember.inject.service,d=Ember.inject.service,c=Ember.inject.service,p=Ember._tracked,m=Ember._tracked,h=Ember._tracked,b=Ember._tracked,f=Ember._tracked,g=Ember._tracked,v=Ember._tracked,y=Ember._tracked,w=Ember._tracked,E=Ember._tracked,k=Ember._tracked,P=Ember._tracked,O=Ember._tracked,_=Ember._tracked,j=class extends Ember.Service{constructor(...e){super(...e),K(this,"dashboardMocks",T,this),K(this,"store",z,this),K(this,"ajax",x,this),K(this,"ghostPaths",S,this),K(this,"membersCountCache",C,this),K(this,"settings",M,this),K(this,"membersUtils",D,this),K(this,"membersStats",A,this),K(this,"siteStatus",L,this),K(this,"memberCountStats",I,this),K(this,"subscriptionCountStats",N,this),K(this,"mrrStats",R,this),K(this,"paidMembersByCadence",F,this),K(this,"paidMembersByTier",U,this),K(this,"membersLastSeen30d",B,this),K(this,"memberAttributionStats",H,this),K(this,"membersLastSeen7d",V,this),K(this,"newsletterSubscribers",q,this),K(this,"emailsSent30d",$,this),K(this,"emailOpenRateStats",Y,this),K(this,"chartDays",W,this),K(this,"lastSeenFilterStatus",G,this),J(this,"paidTiers",null)}get activePaidTiers(){return this.paidTiers?this.paidTiers.filter((e=>e.active)):null}get memberCounts(){if(!this.memberCountStats)return null
3978
3978
  const e=this.memberCountStats[this.memberCountStats.length-1]
3979
3979
  return{total:e.paid+e.comped+e.free,paid:e.paid+e.comped,free:e.free}}get currentMRR(){if(!this.mrrStats)return null
3980
3980
  return this.mrrStats[this.mrrStats.length-1].mrr}get memberCountsTrend(){if(!this.memberCountStats)return null
@@ -3995,14 +3995,13 @@ const e=this.membersUtils.paidMembersEnabled&&this.activePaidTiers&&this.activeP
3995
3995
  this.siteStatus={hasPaidTiers:e,hasMultipleTiers:e&&this.activePaidTiers.length>1,newslettersEnabled:"disabled"!==this.settings.editorDefaultEmailRecipients,membersEnabled:this.membersUtils.isMembersEnabled}}loadPaidMembersByCadence(){this.loadSubscriptionCountStats()}loadPaidMembersByTier(){this.loadSubscriptionCountStats()}loadSubscriptionCountStats(){return this._loadSubscriptionCountStats.isRunning?this._loadSubscriptionCountStats.last:this._loadSubscriptionCountStats.perform()}*_loadSubscriptionCountStats(){if(this.subscriptionCountStats=null,this.dashboardMocks.enabled)return yield this.dashboardMocks.waitRandom(),null===this.dashboardMocks.subscriptionCountStats?null:(this.subscriptionCountStats=this.dashboardMocks.subscriptionCountStats,this.paidMembersByCadence={...this.dashboardMocks.paidMembersByCadence},void(this.paidMembersByTier=[...this.dashboardMocks.paidMembersByTier]))
3996
3996
  let e=this.ghostPaths.url.api("stats/subscriptions"),t=yield this.ajax.request(e)
3997
3997
  const i={month:0,year:0}
3998
- for(const a of t.meta.cadences)i[a]=t.meta.totals.reduce(((e,t)=>t.cadence!==a?e:e+t.count),0)
3998
+ for(const r of t.meta.cadences)i[r]=t.meta.totals.reduce(((e,t)=>t.cadence!==r?e:e+t.count),0)
3999
3999
  yield this.loadPaidTiers()
4000
- const r=[]
4001
- for(const a of t.meta.tiers){const e=this.paidTiers.find((e=>e.id===a))
4002
- e&&r.push({tier:{id:e.id,name:e.name},members:t.meta.totals.reduce(((e,t)=>t.tier!==a?e:e+t.count),0)})}for(const a of this.activePaidTiers)r.find((e=>e.tier.id===a.id))||r.push({tier:{id:a.id,name:a.name},members:0})
4003
- const n=function e(t,i){const[r,...n]=t
4004
- return r?i?r.date===i.date?e(n,{date:i.date,count:i.count+r.count,positiveDelta:i.positiveDelta+r.positive_delta,negativeDelta:i.negativeDelta+r.negative_delta,signups:i.signups+r.signups,cancellations:i.cancellations+r.cancellations}):[i].concat(e(t)):e(n,{date:r.date,count:r.count,positiveDelta:r.positive_delta,negativeDelta:r.negative_delta,signups:r.signups,cancellations:r.cancellations}):i?[i]:[]}(t.stats)
4005
- this.paidMembersByCadence=i,this.paidMembersByTier=r,this.subscriptionCountStats=n}loadMemberCountStats(){return this._loadMemberCountStats.isRunning?this._loadMemberCountStats.last:this._loadMemberCountStats.perform()}*_loadMemberCountStats(){if(this.memberCountStats=null,this.dashboardMocks.enabled)return yield this.dashboardMocks.waitRandom(),null===this.dashboardMocks.memberCountStats?null:void(this.memberCountStats=this.dashboardMocks.memberCountStats)
4000
+ const n=[]
4001
+ for(const r of t.meta.tiers){const e=this.paidTiers.find((e=>e.id===r))
4002
+ e&&n.push({tier:{id:e.id,name:e.name},members:t.meta.totals.reduce(((e,t)=>t.tier!==r?e:e+t.count),0)})}for(const r of this.activePaidTiers)n.find((e=>e.tier.id===r.id))||n.push({tier:{id:r.id,name:r.name},members:0})
4003
+ const a=(0,r.default)(t.stats)
4004
+ this.paidMembersByCadence=i,this.paidMembersByTier=n,this.subscriptionCountStats=a}loadMemberCountStats(){return this._loadMemberCountStats.isRunning?this._loadMemberCountStats.last:this._loadMemberCountStats.perform()}*_loadMemberCountStats(){if(this.memberCountStats=null,this.dashboardMocks.enabled)return yield this.dashboardMocks.waitRandom(),null===this.dashboardMocks.memberCountStats?null:void(this.memberCountStats=this.dashboardMocks.memberCountStats)
4006
4005
  const e=yield this.membersStats.fetchMemberCount()
4007
4006
  this.memberCountStats=e.stats.map((e=>({...e,paidCanceled:e.paid_canceled,paidSubscribed:e.paid_subscribed})))}loadMemberAttributionStats(){return this._loadMemberAttributionStats.isRunning?this._loadMemberAttributionStats.last:this._loadMemberAttributionStats.perform()}*_loadMemberAttributionStats(){if(this.memberAttributionStats=[],this.dashboardMocks.enabled)return yield this.dashboardMocks.waitRandom(),void(this.memberAttributionStats=this.dashboardMocks.memberAttributionStats)
4008
4007
  let e=this.ghostPaths.url.api("stats/referrers"),t=yield this.ajax.request(e)
@@ -4042,7 +4041,7 @@ let u=l>0?e[l-1]:null
4042
4041
  let d=u||i
4043
4042
  for(;a.isBefore(s);){let t=a.format("YYYY-MM-DD")
4044
4043
  const i=e.find((e=>e.date===t))
4045
- d=i||{date:t,...r(d)},o.push(d),a=a.add(1,"day")}return o}},j=J(_.prototype,"dashboardMocks",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=J(_.prototype,"store",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=J(_.prototype,"ajax",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=J(_.prototype,"ghostPaths",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=J(_.prototype,"membersCountCache",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=J(_.prototype,"settings",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=J(_.prototype,"membersUtils",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=J(_.prototype,"membersStats",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=J(_.prototype,"siteStatus",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),L=J(_.prototype,"memberCountStats",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),I=J(_.prototype,"subscriptionCountStats",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),N=J(_.prototype,"mrrStats",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),R=J(_.prototype,"paidMembersByCadence",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),F=J(_.prototype,"paidMembersByTier",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),U=J(_.prototype,"membersLastSeen30d",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),B=J(_.prototype,"memberAttributionStats",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),H=J(_.prototype,"membersLastSeen7d",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),V=J(_.prototype,"newsletterSubscribers",[w],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),q=J(_.prototype,"emailsSent30d",[E],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),$=J(_.prototype,"emailOpenRateStats",[k],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),Y=J(_.prototype,"chartDays",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return 31}}),W=J(_.prototype,"lastSeenFilterStatus",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return"total"}}),J(_.prototype,"_loadSiteStatus",[i.task],Object.getOwnPropertyDescriptor(_.prototype,"_loadSiteStatus"),_.prototype),J(_.prototype,"_loadSubscriptionCountStats",[i.task],Object.getOwnPropertyDescriptor(_.prototype,"_loadSubscriptionCountStats"),_.prototype),J(_.prototype,"_loadMemberCountStats",[i.task],Object.getOwnPropertyDescriptor(_.prototype,"_loadMemberCountStats"),_.prototype),J(_.prototype,"_loadMemberAttributionStats",[i.task],Object.getOwnPropertyDescriptor(_.prototype,"_loadMemberAttributionStats"),_.prototype),J(_.prototype,"_loadMrrStats",[i.task],Object.getOwnPropertyDescriptor(_.prototype,"_loadMrrStats"),_.prototype),J(_.prototype,"_loadLastSeen",[i.task],Object.getOwnPropertyDescriptor(_.prototype,"_loadLastSeen"),_.prototype),J(_.prototype,"_loadPaidTiers",[i.task],Object.getOwnPropertyDescriptor(_.prototype,"_loadPaidTiers"),_.prototype),J(_.prototype,"_loadNewsletterSubscribers",[i.task],Object.getOwnPropertyDescriptor(_.prototype,"_loadNewsletterSubscribers"),_.prototype),J(_.prototype,"_loadEmailsSent",[i.task],Object.getOwnPropertyDescriptor(_.prototype,"_loadEmailsSent"),_.prototype),J(_.prototype,"_loadEmailOpenRateStats",[i.task],Object.getOwnPropertyDescriptor(_.prototype,"_loadEmailOpenRateStats"),_.prototype),_)})),define("ghost-admin/services/data-cache",["exports"],(function(e){function t(e,t,i){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e
4044
+ d=i||{date:t,...r(d)},o.push(d),a=a.add(1,"day")}return o}},T=X(j.prototype,"dashboardMocks",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=X(j.prototype,"store",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=X(j.prototype,"ajax",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=X(j.prototype,"ghostPaths",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=X(j.prototype,"membersCountCache",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=X(j.prototype,"settings",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=X(j.prototype,"membersUtils",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=X(j.prototype,"membersStats",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L=X(j.prototype,"siteStatus",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),I=X(j.prototype,"memberCountStats",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),N=X(j.prototype,"subscriptionCountStats",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),R=X(j.prototype,"mrrStats",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),F=X(j.prototype,"paidMembersByCadence",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),U=X(j.prototype,"paidMembersByTier",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),B=X(j.prototype,"membersLastSeen30d",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),H=X(j.prototype,"memberAttributionStats",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),V=X(j.prototype,"membersLastSeen7d",[w],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),q=X(j.prototype,"newsletterSubscribers",[E],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),$=X(j.prototype,"emailsSent30d",[k],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),Y=X(j.prototype,"emailOpenRateStats",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),W=X(j.prototype,"chartDays",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return 31}}),G=X(j.prototype,"lastSeenFilterStatus",[_],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return"total"}}),X(j.prototype,"_loadSiteStatus",[i.task],Object.getOwnPropertyDescriptor(j.prototype,"_loadSiteStatus"),j.prototype),X(j.prototype,"_loadSubscriptionCountStats",[i.task],Object.getOwnPropertyDescriptor(j.prototype,"_loadSubscriptionCountStats"),j.prototype),X(j.prototype,"_loadMemberCountStats",[i.task],Object.getOwnPropertyDescriptor(j.prototype,"_loadMemberCountStats"),j.prototype),X(j.prototype,"_loadMemberAttributionStats",[i.task],Object.getOwnPropertyDescriptor(j.prototype,"_loadMemberAttributionStats"),j.prototype),X(j.prototype,"_loadMrrStats",[i.task],Object.getOwnPropertyDescriptor(j.prototype,"_loadMrrStats"),j.prototype),X(j.prototype,"_loadLastSeen",[i.task],Object.getOwnPropertyDescriptor(j.prototype,"_loadLastSeen"),j.prototype),X(j.prototype,"_loadPaidTiers",[i.task],Object.getOwnPropertyDescriptor(j.prototype,"_loadPaidTiers"),j.prototype),X(j.prototype,"_loadNewsletterSubscribers",[i.task],Object.getOwnPropertyDescriptor(j.prototype,"_loadNewsletterSubscribers"),j.prototype),X(j.prototype,"_loadEmailsSent",[i.task],Object.getOwnPropertyDescriptor(j.prototype,"_loadEmailsSent"),j.prototype),X(j.prototype,"_loadEmailOpenRateStats",[i.task],Object.getOwnPropertyDescriptor(j.prototype,"_loadEmailOpenRateStats"),j.prototype),j)})),define("ghost-admin/services/data-cache",["exports"],(function(e){function t(e,t,i){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e
4046
4045
  var i=e[Symbol.toPrimitive]
4047
4046
  if(void 0!==i){var r=i.call(e,t||"default")
4048
4047
  if("object"!=typeof r)return r
@@ -4067,23 +4066,23 @@ e.default=(i=Ember.inject.service,r=Ember.inject.service,n=Ember.inject.service,
4067
4066
  return this.ghostPaths.url.join(e.host,t).replace(/\/$/,"")}get iframeURL(){let e=this.exploreUrl
4068
4067
  if(window.location.hash&&window.location.hash.includes(this.exploreRouteRoot)){let t=window.location.hash.replace(this.exploreRouteRoot,"")
4069
4068
  t&&!t.includes("connect")&&(e+=t.replace(/^\//,""))}return e}constructor(){super(...arguments),f(this,"router",u,this),f(this,"feature",d,this),f(this,"ghostPaths",c,this),f(this,"config",p,this),g(this,"exploreUrl","https://ghost.org/explore/"),g(this,"exploreRouteRoot","#/explore"),g(this,"submitRoute","submit"),f(this,"exploreWindowOpen",m,this),f(this,"siteData",h,this),f(this,"isIframeTransition",b,this),this.exploreUrl&&window.addEventListener("message",(e=>{e&&e.data&&e.data.route&&this.handleRouteChangeInIframe(e.data.route)}))}handleRouteChangeInIframe(e){if(this.exploreWindowOpen){let t=this.exploreRouteRoot
4070
- e.match(/^\/explore(\/.*)?/)&&(e=e.replace(/\/explore/,"")),"/"!==e&&(t+=e),window.location.hash!==t&&window.history.replaceState(window.history.state,"",t)}}sendRouteUpdate(e){this.getExploreIframe().contentWindow.postMessage({query:"routeUpdate",response:e},"*")}sendUIUpdate(e){this.getExploreIframe().contentWindow.postMessage({query:"uiUpdate",response:e},"*")}toggleExploreWindow(e){this.config.hostSettings?.forceUpgrade&&e||this.exploreWindowOpen&&e||(this.exploreWindowOpen=e)}openExploreWindow(){this.config.hostSettings?.forceUpgrade||this.exploreWindowOpen||(this.ensureIframeIsLoaded(),window.location.hash="/explore",this.router.transitionTo("/explore"),this.toggleExploreWindow(!0))}ensureIframeIsLoaded(){this.getExploreIframe()&&!this.getExploreIframe()?.src&&(this.getExploreIframe().src=this.iframeURL)}getExploreIframe(){return document.getElementById("explore-frame")}},u=v(l.prototype,"router",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=v(l.prototype,"feature",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=v(l.prototype,"ghostPaths",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=v(l.prototype,"config",[t.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=v(l.prototype,"exploreWindowOpen",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),h=v(l.prototype,"siteData",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),b=v(l.prototype,"isIframeTransition",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),l)})),define("ghost-admin/services/feature",["exports","jquery","ghost-admin/decorators/inject"],(function(e,t,i){var r,n,a,s,o,l,u,d,c,p,m,h,b,f,g,v,y,w,E,k,P,O,_,j,T,z,x,S,C,M,D,A,L,I,N,R,F,U,B,H,V,q,$,Y,W,G,K,J,X,Z,Q,ee,te,ie,re,ne,ae,se,oe,le,ue,de,ce,pe,me,he,be,fe,ge,ve
4071
- function ye(e,t,i,r){i&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(r):void 0})}function we(e,t,i){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e
4069
+ e.match(/^\/explore(\/.*)?/)&&(e=e.replace(/\/explore/,"")),"/"!==e&&(t+=e),window.location.hash!==t&&window.history.replaceState(window.history.state,"",t)}}sendRouteUpdate(e){this.getExploreIframe().contentWindow.postMessage({query:"routeUpdate",response:e},"*")}sendUIUpdate(e){this.getExploreIframe().contentWindow.postMessage({query:"uiUpdate",response:e},"*")}toggleExploreWindow(e){this.config.hostSettings?.forceUpgrade&&e||this.exploreWindowOpen&&e||(this.exploreWindowOpen=e)}openExploreWindow(){this.config.hostSettings?.forceUpgrade||this.exploreWindowOpen||(this.ensureIframeIsLoaded(),window.location.hash="/explore",this.router.transitionTo("/explore"),this.toggleExploreWindow(!0))}ensureIframeIsLoaded(){this.getExploreIframe()&&!this.getExploreIframe()?.src&&(this.getExploreIframe().src=this.iframeURL)}getExploreIframe(){return document.getElementById("explore-frame")}},u=v(l.prototype,"router",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=v(l.prototype,"feature",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=v(l.prototype,"ghostPaths",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=v(l.prototype,"config",[t.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=v(l.prototype,"exploreWindowOpen",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),h=v(l.prototype,"siteData",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),b=v(l.prototype,"isIframeTransition",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),l)})),define("ghost-admin/services/feature",["exports","jquery","ghost-admin/decorators/inject"],(function(e,t,i){var r,n,a,s,o,l,u,d,c,p,m,h,b,f,g,v,y,w,E,k,P,O,_,j,T,z,x,S,C,M,D,A,L,I,N,R,F,U,B,H,V,q,$,Y,W,G,K,J,X,Z,Q,ee,te,ie,re,ne,ae,se,oe,le,ue,de,ce,pe,me,he,be,fe,ge,ve,ye,we
4070
+ function Ee(e,t,i,r){i&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(r):void 0})}function ke(e,t,i){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e
4072
4071
  var i=e[Symbol.toPrimitive]
4073
4072
  if(void 0!==i){var r=i.call(e,t||"default")
4074
4073
  if("object"!=typeof r)return r
4075
4074
  throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string")
4076
- return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function Ee(e,t,i,r,n){var a={}
4077
- return Object.keys(r).forEach((function(e){a[e]=r[e]})),a.enumerable=!!a.enumerable,a.configurable=!!a.configurable,("value"in a||a.initializer)&&(a.writable=!0),a=i.slice().reverse().reduce((function(i,r){return r(e,t,i)||i}),a),n&&void 0!==a.initializer&&(a.value=a.initializer?a.initializer.call(n):void 0,a.initializer=void 0),void 0===a.initializer&&(Object.defineProperty(e,t,a),a=null),a}function ke(e,t={}){let{user:i,onChange:r}=t,n=i?[`accessibility.${e}`]:[`config.${e}`,`labs.${e}`]
4075
+ return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function Pe(e,t,i,r,n){var a={}
4076
+ return Object.keys(r).forEach((function(e){a[e]=r[e]})),a.enumerable=!!a.enumerable,a.configurable=!!a.configurable,("value"in a||a.initializer)&&(a.writable=!0),a=i.slice().reverse().reduce((function(i,r){return r(e,t,i)||i}),a),n&&void 0!==a.initializer&&(a.value=a.initializer?a.initializer.call(n):void 0,a.initializer=void 0),void 0===a.initializer&&(Object.defineProperty(e,t,a),a=null),a}function Oe(e,t={}){let{user:i,onChange:r}=t,n=i?[`accessibility.${e}`]:[`config.${e}`,`labs.${e}`]
4078
4077
  return Ember.computed.apply(Ember,n.concat({get(){let t=!1
4079
- return t=i?this.get(`accessibility.${e}`):"boolean"==typeof this.get(`config.${e}`)?this.get(`config.${e}`):this.get(`labs.${e}`)||!1,t},set(e,i){return this.update(e,i,t),r&&this.get(r).bind(this)(i),i}}))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.feature=ke
4080
- e.default=(r=Ember.inject.service,n=Ember.inject.service,a=Ember.inject.service,s=Ember.inject.service,o=Ember.inject.service,l=ke("emailAnalytics"),u=ke("nightShift",{user:!0,onChange:"_setAdminTheme"}),d=ke("referralInviteDismissed",{user:!0}),c=ke("urlCache"),p=ke("lexicalMultiplayer"),m=ke("audienceFeedback"),h=ke("webmentions"),b=ke("websockets"),f=ke("stripeAutomaticTax"),g=ke("emailCustomization"),v=ke("i18n"),y=ke("announcementBar"),w=ke("signupCard"),E=ke("signupForm"),k=ke("collections"),P=ke("mailEvents"),O=ke("collectionsCard"),_=ke("importMemberTier"),j=ke("tipsAndDonations"),T=ke("recommendations"),z=ke("lexicalIndicators"),x=ke("filterEmailDisabled"),S=ke("adminXDemo"),C=ke("portalImprovements"),M=ke("ActivityPub"),D=ke("internalLinking"),A=ke("editorExcerpt"),L=ke("newsletterExcerpt"),I=Ember.computed("settings.labs"),N=Ember.computed("_user.accessibility"),R=class extends Ember.Service{constructor(...e){super(...e),ye(this,"lazyLoader",F,this),ye(this,"notifications",U,this),ye(this,"session",B,this),ye(this,"settings",H,this),ye(this,"store",V,this),ye(this,"config",q,this),ye(this,"emailAnalytics",$,this),ye(this,"nightShift",Y,this),ye(this,"referralInviteDismissed",W,this),ye(this,"urlCache",G,this),ye(this,"lexicalMultiplayer",K,this),ye(this,"audienceFeedback",J,this),ye(this,"webmentions",X,this),ye(this,"websockets",Z,this),ye(this,"stripeAutomaticTax",Q,this),ye(this,"emailCustomization",ee,this),ye(this,"i18n",te,this),ye(this,"announcementBar",ie,this),ye(this,"signupCard",re,this),ye(this,"signupForm",ne,this),ye(this,"collections",ae,this),ye(this,"mailEvents",se,this),ye(this,"collectionsCard",oe,this),ye(this,"importMemberTier",le,this),ye(this,"tipsAndDonations",ue,this),ye(this,"recommendations",de,this),ye(this,"lexicalIndicators",ce,this),ye(this,"filterEmailDisabled",pe,this),ye(this,"adminXDemo",me,this)
4081
- ye(this,"portalImprovements",he,this),ye(this,"ActivityPub",be,this),ye(this,"internalLinking",fe,this),ye(this,"editorExcerpt",ge,this),ye(this,"newsletterExcerpt",ve,this),we(this,"_user",null)}get labs(){let e=this.settings.labs
4078
+ return t=i?this.get(`accessibility.${e}`):"boolean"==typeof this.get(`config.${e}`)?this.get(`config.${e}`):this.get(`labs.${e}`)||!1,t},set(e,i){return this.update(e,i,t),r&&this.get(r).bind(this)(i),i}}))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.feature=Oe
4079
+ e.default=(r=Ember.inject.service,n=Ember.inject.service,a=Ember.inject.service,s=Ember.inject.service,o=Ember.inject.service,l=Oe("emailAnalytics"),u=Oe("nightShift",{user:!0,onChange:"_setAdminTheme"}),d=Oe("referralInviteDismissed",{user:!0}),c=Oe("urlCache"),p=Oe("lexicalMultiplayer"),m=Oe("audienceFeedback"),h=Oe("webmentions"),b=Oe("websockets"),f=Oe("stripeAutomaticTax"),g=Oe("emailCustomization"),v=Oe("i18n"),y=Oe("announcementBar"),w=Oe("signupCard"),E=Oe("signupForm"),k=Oe("collections"),P=Oe("mailEvents"),O=Oe("collectionsCard"),_=Oe("importMemberTier"),j=Oe("tipsAndDonations"),T=Oe("recommendations"),z=Oe("lexicalIndicators"),x=Oe("filterEmailDisabled"),S=Oe("adminXDemo"),C=Oe("portalImprovements"),M=Oe("ActivityPub"),D=Oe("internalLinking"),A=Oe("editorExcerpt"),L=Oe("newsletterExcerpt"),I=Oe("contentVisibility"),N=Ember.computed("settings.labs"),R=Ember.computed("_user.accessibility"),F=class extends Ember.Service{constructor(...e){super(...e),Ee(this,"lazyLoader",U,this),Ee(this,"notifications",B,this),Ee(this,"session",H,this),Ee(this,"settings",V,this),Ee(this,"store",q,this),Ee(this,"config",$,this),Ee(this,"emailAnalytics",Y,this),Ee(this,"nightShift",W,this),Ee(this,"referralInviteDismissed",G,this),Ee(this,"urlCache",K,this),Ee(this,"lexicalMultiplayer",J,this),Ee(this,"audienceFeedback",X,this),Ee(this,"webmentions",Z,this),Ee(this,"websockets",Q,this),Ee(this,"stripeAutomaticTax",ee,this),Ee(this,"emailCustomization",te,this),Ee(this,"i18n",ie,this),Ee(this,"announcementBar",re,this),Ee(this,"signupCard",ne,this),Ee(this,"signupForm",ae,this),Ee(this,"collections",se,this),Ee(this,"mailEvents",oe,this),Ee(this,"collectionsCard",le,this),Ee(this,"importMemberTier",ue,this),Ee(this,"tipsAndDonations",de,this),Ee(this,"recommendations",ce,this),Ee(this,"lexicalIndicators",pe,this),Ee(this,"filterEmailDisabled",me,this),Ee(this,"adminXDemo",he,this)
4080
+ Ee(this,"portalImprovements",be,this),Ee(this,"ActivityPub",fe,this),Ee(this,"internalLinking",ge,this),Ee(this,"editorExcerpt",ve,this),Ee(this,"newsletterExcerpt",ye,this),Ee(this,"contentVisibility",we,this),ke(this,"_user",null)}get labs(){let e=this.settings.labs
4082
4081
  try{return JSON.parse(e)||{}}catch(t){return{}}}get accessibility(){let e=this.get("_user.accessibility")
4083
4082
  try{return JSON.parse(e)||{}}catch(t){return{}}}fetch(){return this.settings.fetch().then((()=>(this.set("_user",this.session.user),this._setAdminTheme().then((()=>!0)))))}update(e,t,i={}){let r=i.user?"accessibility":"labs",n=this.get(i.user?"_user":"settings"),a=this.get(r)
4084
4083
  return Ember.set(a,e,t),i.requires&&!0===t&&i.requires.forEach((e=>{Ember.set(a,e,!0)})),n.set(r,JSON.stringify(a)),n.save().then((()=>(this.notifyPropertyChange(r),this.get(`${r}.${e}`)))).catch((t=>{if(n.rollbackAttributes(),this.notifyPropertyChange(r),!t)throw new Ember.Error(`Validation of the feature service ${i.user?"user":"settings"} model failed when updating ${r}.`)
4085
4084
  return this.notifications.showAPIError(t),this.get(`${r}.${e}`)}))}_setAdminTheme(e){let i=e
4086
- return void 0===i&&(i=e||this.nightShift),this.lazyLoader.loadStyle("dark","assets/ghost-dark-031957661056b00048f03aac0618c480.css",!0).then((()=>{(0,t.default)("link[title=dark]").prop("disabled",!i)})).catch((()=>{(0,t.default)("link[title=dark]").prop("disabled",!0)}))}},F=Ee(R.prototype,"lazyLoader",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),U=Ee(R.prototype,"notifications",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),B=Ee(R.prototype,"session",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),H=Ee(R.prototype,"settings",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),V=Ee(R.prototype,"store",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),q=Ee(R.prototype,"config",[i.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),$=Ee(R.prototype,"emailAnalytics",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Y=Ee(R.prototype,"nightShift",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),W=Ee(R.prototype,"referralInviteDismissed",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),G=Ee(R.prototype,"urlCache",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),K=Ee(R.prototype,"lexicalMultiplayer",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),J=Ee(R.prototype,"audienceFeedback",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),X=Ee(R.prototype,"webmentions",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Z=Ee(R.prototype,"websockets",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Q=Ee(R.prototype,"stripeAutomaticTax",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ee=Ee(R.prototype,"emailCustomization",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),te=Ee(R.prototype,"i18n",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ie=Ee(R.prototype,"announcementBar",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),re=Ee(R.prototype,"signupCard",[w],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ne=Ee(R.prototype,"signupForm",[E],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ae=Ee(R.prototype,"collections",[k],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),se=Ee(R.prototype,"mailEvents",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),oe=Ee(R.prototype,"collectionsCard",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),le=Ee(R.prototype,"importMemberTier",[_],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ue=Ee(R.prototype,"tipsAndDonations",[j],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),de=Ee(R.prototype,"recommendations",[T],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ce=Ee(R.prototype,"lexicalIndicators",[z],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),pe=Ee(R.prototype,"filterEmailDisabled",[x],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),me=Ee(R.prototype,"adminXDemo",[S],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),he=Ee(R.prototype,"portalImprovements",[C],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),be=Ee(R.prototype,"ActivityPub",[M],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),fe=Ee(R.prototype,"internalLinking",[D],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ge=Ee(R.prototype,"editorExcerpt",[A],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ve=Ee(R.prototype,"newsletterExcerpt",[L],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Ee(R.prototype,"labs",[I],Object.getOwnPropertyDescriptor(R.prototype,"labs"),R.prototype),Ee(R.prototype,"accessibility",[N],Object.getOwnPropertyDescriptor(R.prototype,"accessibility"),R.prototype),R)})),define("ghost-admin/services/frontend",["exports","fetch","validator","ghost-admin/decorators/inject"],(function(e,t,i,r){var n,a,s,o,l,u
4085
+ return void 0===i&&(i=e||this.nightShift),this.lazyLoader.loadStyle("dark","assets/ghost-dark-4b969016a590f3112196d4ba3da7843a.css",!0).then((()=>{(0,t.default)("link[title=dark]").prop("disabled",!i)})).catch((()=>{(0,t.default)("link[title=dark]").prop("disabled",!0)}))}},U=Pe(F.prototype,"lazyLoader",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),B=Pe(F.prototype,"notifications",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),H=Pe(F.prototype,"session",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),V=Pe(F.prototype,"settings",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),q=Pe(F.prototype,"store",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),$=Pe(F.prototype,"config",[i.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Y=Pe(F.prototype,"emailAnalytics",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),W=Pe(F.prototype,"nightShift",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),G=Pe(F.prototype,"referralInviteDismissed",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),K=Pe(F.prototype,"urlCache",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),J=Pe(F.prototype,"lexicalMultiplayer",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),X=Pe(F.prototype,"audienceFeedback",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Z=Pe(F.prototype,"webmentions",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Q=Pe(F.prototype,"websockets",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ee=Pe(F.prototype,"stripeAutomaticTax",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),te=Pe(F.prototype,"emailCustomization",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ie=Pe(F.prototype,"i18n",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),re=Pe(F.prototype,"announcementBar",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ne=Pe(F.prototype,"signupCard",[w],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ae=Pe(F.prototype,"signupForm",[E],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),se=Pe(F.prototype,"collections",[k],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),oe=Pe(F.prototype,"mailEvents",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),le=Pe(F.prototype,"collectionsCard",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ue=Pe(F.prototype,"importMemberTier",[_],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),de=Pe(F.prototype,"tipsAndDonations",[j],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ce=Pe(F.prototype,"recommendations",[T],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),pe=Pe(F.prototype,"lexicalIndicators",[z],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),me=Pe(F.prototype,"filterEmailDisabled",[x],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),he=Pe(F.prototype,"adminXDemo",[S],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),be=Pe(F.prototype,"portalImprovements",[C],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),fe=Pe(F.prototype,"ActivityPub",[M],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ge=Pe(F.prototype,"internalLinking",[D],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ve=Pe(F.prototype,"editorExcerpt",[A],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ye=Pe(F.prototype,"newsletterExcerpt",[L],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),we=Pe(F.prototype,"contentVisibility",[I],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Pe(F.prototype,"labs",[N],Object.getOwnPropertyDescriptor(F.prototype,"labs"),F.prototype),Pe(F.prototype,"accessibility",[R],Object.getOwnPropertyDescriptor(F.prototype,"accessibility"),F.prototype),F)})),define("ghost-admin/services/frontend",["exports","fetch","validator","ghost-admin/decorators/inject"],(function(e,t,i,r){var n,a,s,o,l,u
4087
4086
  function d(e,t,i,r){i&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(r):void 0})}function c(e,t,i){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e
4088
4087
  var i=e[Symbol.toPrimitive]
4089
4088
  if(void 0!==i){var r=i.call(e,t||"default")
@@ -4579,7 +4578,9 @@ return"/"===e.slice(-1)?e:`${e}/`}return"/"}}}}
4579
4578
  let t=function(e,t){let i=/^\//,r=/\/$/,n=Array.prototype.slice.call(t,0),a=e.replace(r,"")
4580
4579
  return n.forEach((e=>{e&&(a=[a,e.replace(i,"").replace(r,"")].join("/"))})),a+="/"}})),define("ghost-admin/utils/isNumber",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return"number"==typeof e||e&&"object"==typeof e&&"[object Number]"===t.call(e)||!1}
4581
4580
  const{toString:t}=Object.prototype})),define("ghost-admin/utils/link-component",[],(function(){Ember.LinkComponent.reopen({active:Ember.computed("attrs.params","_routing.currentState",(function(){let e=this._super(...arguments)
4582
- return"function"==typeof this.alternateActive&&this.alternateActive(e),e})),activeClass:Ember.computed("tagName",(function(){return"button"===this.tagName?"":"active"}))})})),define("ghost-admin/utils/password-generator",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,n,a,s){var o,l,u="",d=[]
4581
+ return"function"==typeof this.alternateActive&&this.alternateActive(e),e})),activeClass:Ember.computed("tagName",(function(){return"button"===this.tagName?"":"active"}))})})),define("ghost-admin/utils/merge-stats-by-date",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){const t=e.reduce(((e,t)=>{const i=t.date
4582
+ return e[i]||(e[i]={date:i,count:0,positiveDelta:0,negativeDelta:0,signups:0,cancellations:0}),e[i].count+=t.count,e[i].positiveDelta+=t.positive_delta,e[i].negativeDelta+=t.negative_delta,e[i].signups+=t.signups,e[i].cancellations+=t.cancellations,e}),{})
4583
+ return Object.values(t)}})),define("ghost-admin/utils/password-generator",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,n,a,s){var o,l,u="",d=[]
4583
4584
  null==e&&(e=10)
4584
4585
  null==n&&(n=!0)
4585
4586
  null==a&&(a=/\w/)
@@ -4687,13 +4688,13 @@ if(Ember.isEmpty(e.errors.errorsFor("publishedAtBlogTime"))){let t=e.status,r=(0
4687
4688
  "draft"!==t&&"published"!==t||!n.isSameOrAfter(r)?!e.changedAttributes().status&&!e.changedAttributes().publishedAtUTC||"scheduled"!==t||a||(e.errors.add("publishedAtBlogDate","Please choose a future date and time."),this.invalidate()):(e.errors.add("publishedAtBlogDate","Please choose a past date and time."),this.invalidate())}}},featureImageAlt(e){r.default.isLength(e.featureImageAlt||"",0,125)||(e.errors.add("featureImageAlt","Feature image alt text cannot be longer than 125 characters."),this.invalidate())}})})),define("ghost-admin/validators/reset",["exports","ghost-admin/validators/base","ghost-admin/validators/mixins/password","validator"],(function(e,t,i,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
4688
4689
  const n=t.default.extend(i.default,{init(){this.properties=this.properties||["newPassword"],this._super(...arguments)},newPassword(e){let t=e.newPassword,i=e.ne2Password
4689
4690
  Ember.isBlank(t)?(e.errors.add("newPassword","Please enter a password."),this.invalidate()):r.default.equals(t,i||"")||(e.errors.add("ne2Password","The two new passwords don't match."),this.invalidate()),this.passwordValidation(e,t,"newPassword")}})
4690
- e.default=n.create()})),define("ghost-admin/validators/setting",["exports","ghost-admin/validators/base","validator"],(function(e,t,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
4691
+ e.default=n.create()}))
4692
+ define("ghost-admin/validators/setting",["exports","ghost-admin/validators/base","validator"],(function(e,t,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
4691
4693
  e.default=t.default.create({properties:["title","description","password","slackUrl"],title(e){let t=e.title
4692
4694
  i.default.isLength(t||"",0,150)||(e.errors.add("title","Title is too long"),this.invalidate())},description(e){let t=e.description
4693
4695
  i.default.isLength(t||"",0,200)||(e.errors.add("description","Description is too long"),this.invalidate())},password(e){let t=e.isPrivate,i=e.password
4694
4696
  t&&""===i&&(e.errors.add("password","Password must be supplied"),this.invalidate())},slackUrl(e){let t=e.slackUrl
4695
- Ember.isBlank(t)||i.default.isURL(t,{require_protocol:!0})||(e.errors.add("slackUrl","The URL must be in a format like https://hooks.slack.com/services/<your personal key>"),this.invalidate())}})}))
4696
- define("ghost-admin/validators/setup",["exports","ghost-admin/validators/new-user","validator"],(function(e,t,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
4697
+ Ember.isBlank(t)||i.default.isURL(t,{require_protocol:!0})||(e.errors.add("slackUrl","The URL must be in a format like https://hooks.slack.com/services/<your personal key>"),this.invalidate())}})})),define("ghost-admin/validators/setup",["exports","ghost-admin/validators/new-user","validator"],(function(e,t,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
4697
4698
  e.default=t.default.create({properties:["name","email","password","blogTitle"],blogTitle(e){let t=e.blogTitle
4698
4699
  i.default.isLength(t||"",1)||(e.errors.add("blogTitle","Please enter a site title."),this.invalidate()),i.default.isLength(t||"",0,150)||(e.errors.add("blogTitle","Title is too long"),this.invalidate())}})})),define("ghost-admin/validators/signin",["exports","ghost-admin/validators/base","validator"],(function(e,t,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
4699
4700
  e.default=t.default.create({properties:["identification","signin","forgotPassword"],invalidMessage:"Email address is not valid",identification(e){let t=e.identification
@@ -4725,6 +4726,6 @@ this.passwordChange(e),e.hasValidated.addObject("password"),Ember.isBlank(t)&&(e
4725
4726
  e.default=n.create()})),define("ghost-admin/validators/webhook",["exports","ghost-admin/validators/base","validator"],(function(e,t,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
4726
4727
  e.default=t.default.create({properties:["name","event","targetUrl","secret"],name(e){Ember.isBlank(e.name)?(e.errors.add("name","Please enter a name"),e.hasValidated.pushObject("name"),this.invalidate()):i.default.isLength(e.name,0,191)||(e.errors.add("name","Name is too long, max 191 chars"),e.hasValidated.pushObject("name"),this.invalidate())},event(e){Ember.isBlank(e.event)&&(e.errors.add("event","Please select an event"),e.hasValidated.pushObject("event"),this.invalidate())},targetUrl(e){Ember.isBlank(e.targetUrl)?e.errors.add("targetUrl","Please enter a target URL"):i.default.isURL(e.targetUrl||"",{require_protocol:!1})?i.default.isLength(e.targetUrl,0,2e3)||e.errors.add("targetUrl","Target URL is too long, max 2000 chars"):e.errors.add("targetUrl","Please enter a valid URL"),e.hasValidated.pushObject("targetUrl"),e.errors.has("targetUrl")&&this.invalidate()},secret(e){Ember.isBlank(e.secret)||i.default.isLength(e.secret,0,191)||(e.errors.add("secret","Secret is too long, max 191 chars"),e.hasValidated.pushObject("secret"),this.invalidate())}})})),define("ghost-admin/views/application",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
4727
4728
  e.default=Ember.Component.extend({})})),define("ghost-admin/config/environment",[],(function(){try{var e="ghost-admin/config/environment",t=document.querySelector('meta[name="'+e+'"]').getAttribute("content"),i={default:JSON.parse(decodeURIComponent(t))}
4728
- return Object.defineProperty(i,"__esModule",{value:!0}),i}catch(r){throw new Error('Could not read config from meta tag with name "'+e+'".')}})),runningTests||require("ghost-admin/app").default.create({version:"5.86",name:"ghost-admin"})
4729
+ return Object.defineProperty(i,"__esModule",{value:!0}),i}catch(r){throw new Error('Could not read config from meta tag with name "'+e+'".')}})),runningTests||require("ghost-admin/app").default.create({version:"5.87",name:"ghost-admin"})
4729
4730
 
4730
- //# sourceMappingURL=ghost-81fbc121809409f63439fb703fcce149.map
4731
+ //# sourceMappingURL=ghost-3981ccaa22f07ebd007f235efebcda70.map