ghost 5.70.2 → 5.71.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 (145) hide show
  1. package/README.md +1 -1
  2. package/components/tryghost-adapter-cache-memory-ttl-5.71.0.tgz +0 -0
  3. package/components/{tryghost-adapter-cache-redis-5.70.2.tgz → tryghost-adapter-cache-redis-5.71.0.tgz} +0 -0
  4. package/components/{tryghost-adapter-manager-5.70.2.tgz → tryghost-adapter-manager-5.71.0.tgz} +0 -0
  5. package/components/tryghost-announcement-bar-settings-5.71.0.tgz +0 -0
  6. package/components/tryghost-api-framework-5.71.0.tgz +0 -0
  7. package/components/{tryghost-api-version-compatibility-service-5.70.2.tgz → tryghost-api-version-compatibility-service-5.71.0.tgz} +0 -0
  8. package/components/{tryghost-audience-feedback-5.70.2.tgz → tryghost-audience-feedback-5.71.0.tgz} +0 -0
  9. package/components/{tryghost-bookshelf-repository-5.70.2.tgz → tryghost-bookshelf-repository-5.71.0.tgz} +0 -0
  10. package/components/tryghost-bootstrap-socket-5.71.0.tgz +0 -0
  11. package/components/tryghost-collections-5.71.0.tgz +0 -0
  12. package/components/tryghost-constants-5.71.0.tgz +0 -0
  13. package/components/tryghost-custom-theme-settings-service-5.71.0.tgz +0 -0
  14. package/components/{tryghost-data-generator-5.70.2.tgz → tryghost-data-generator-5.71.0.tgz} +0 -0
  15. package/components/{tryghost-domain-events-5.70.2.tgz → tryghost-domain-events-5.71.0.tgz} +0 -0
  16. package/components/tryghost-donations-5.71.0.tgz +0 -0
  17. package/components/tryghost-dynamic-routing-events-5.71.0.tgz +0 -0
  18. package/components/{tryghost-email-analytics-provider-mailgun-5.70.2.tgz → tryghost-email-analytics-provider-mailgun-5.71.0.tgz} +0 -0
  19. package/components/{tryghost-email-analytics-service-5.70.2.tgz → tryghost-email-analytics-service-5.71.0.tgz} +0 -0
  20. package/components/tryghost-email-content-generator-5.71.0.tgz +0 -0
  21. package/components/{tryghost-email-events-5.70.2.tgz → tryghost-email-events-5.71.0.tgz} +0 -0
  22. package/components/tryghost-email-service-5.71.0.tgz +0 -0
  23. package/components/tryghost-email-suppression-list-5.71.0.tgz +0 -0
  24. package/components/tryghost-event-aware-cache-wrapper-5.71.0.tgz +0 -0
  25. package/components/tryghost-express-dynamic-redirects-5.71.0.tgz +0 -0
  26. package/components/{tryghost-external-media-inliner-5.70.2.tgz → tryghost-external-media-inliner-5.71.0.tgz} +0 -0
  27. package/components/tryghost-extract-api-key-5.71.0.tgz +0 -0
  28. package/components/{tryghost-html-to-plaintext-5.70.2.tgz → tryghost-html-to-plaintext-5.71.0.tgz} +0 -0
  29. package/components/tryghost-i18n-5.71.0.tgz +0 -0
  30. package/components/{tryghost-importer-handler-content-files-5.70.2.tgz → tryghost-importer-handler-content-files-5.71.0.tgz} +0 -0
  31. package/components/tryghost-importer-revue-5.71.0.tgz +0 -0
  32. package/components/{tryghost-in-memory-repository-5.70.2.tgz → tryghost-in-memory-repository-5.71.0.tgz} +0 -0
  33. package/components/{tryghost-job-manager-5.70.2.tgz → tryghost-job-manager-5.71.0.tgz} +0 -0
  34. package/components/{tryghost-link-redirects-5.70.2.tgz → tryghost-link-redirects-5.71.0.tgz} +0 -0
  35. package/components/tryghost-link-replacer-5.71.0.tgz +0 -0
  36. package/components/{tryghost-link-tracking-5.70.2.tgz → tryghost-link-tracking-5.71.0.tgz} +0 -0
  37. package/components/{tryghost-magic-link-5.70.2.tgz → tryghost-magic-link-5.71.0.tgz} +0 -0
  38. package/components/tryghost-mail-events-5.71.0.tgz +0 -0
  39. package/components/tryghost-mailgun-client-5.71.0.tgz +0 -0
  40. package/components/tryghost-member-attribution-5.71.0.tgz +0 -0
  41. package/components/{tryghost-member-events-5.70.2.tgz → tryghost-member-events-5.71.0.tgz} +0 -0
  42. package/components/{tryghost-members-api-5.70.2.tgz → tryghost-members-api-5.71.0.tgz} +0 -0
  43. package/components/{tryghost-members-csv-5.70.2.tgz → tryghost-members-csv-5.71.0.tgz} +0 -0
  44. package/components/{tryghost-members-events-service-5.70.2.tgz → tryghost-members-events-service-5.71.0.tgz} +0 -0
  45. package/components/{tryghost-members-importer-5.70.2.tgz → tryghost-members-importer-5.71.0.tgz} +0 -0
  46. package/components/{tryghost-members-offers-5.70.2.tgz → tryghost-members-offers-5.71.0.tgz} +0 -0
  47. package/components/{tryghost-members-payments-5.70.2.tgz → tryghost-members-payments-5.71.0.tgz} +0 -0
  48. package/components/tryghost-members-ssr-5.71.0.tgz +0 -0
  49. package/components/{tryghost-members-stripe-service-5.70.2.tgz → tryghost-members-stripe-service-5.71.0.tgz} +0 -0
  50. package/components/{tryghost-mentions-email-report-5.70.2.tgz → tryghost-mentions-email-report-5.71.0.tgz} +0 -0
  51. package/components/{tryghost-milestones-5.70.2.tgz → tryghost-milestones-5.71.0.tgz} +0 -0
  52. package/components/{tryghost-minifier-5.70.2.tgz → tryghost-minifier-5.71.0.tgz} +0 -0
  53. package/components/tryghost-model-to-domain-event-interceptor-5.71.0.tgz +0 -0
  54. package/components/tryghost-mw-api-version-mismatch-5.71.0.tgz +0 -0
  55. package/components/tryghost-mw-cache-control-5.71.0.tgz +0 -0
  56. package/components/tryghost-mw-error-handler-5.71.0.tgz +0 -0
  57. package/components/tryghost-mw-session-from-token-5.71.0.tgz +0 -0
  58. package/components/tryghost-mw-update-user-last-seen-5.71.0.tgz +0 -0
  59. package/components/tryghost-mw-version-match-5.71.0.tgz +0 -0
  60. package/components/tryghost-mw-vhost-5.71.0.tgz +0 -0
  61. package/components/{tryghost-nql-filter-expansions-5.70.2.tgz → tryghost-nql-filter-expansions-5.71.0.tgz} +0 -0
  62. package/components/{tryghost-oembed-service-5.70.2.tgz → tryghost-oembed-service-5.71.0.tgz} +0 -0
  63. package/components/{tryghost-package-json-5.70.2.tgz → tryghost-package-json-5.71.0.tgz} +0 -0
  64. package/components/tryghost-post-events-5.71.0.tgz +0 -0
  65. package/components/tryghost-post-revisions-5.71.0.tgz +0 -0
  66. package/components/{tryghost-posts-service-5.70.2.tgz → tryghost-posts-service-5.71.0.tgz} +0 -0
  67. package/components/tryghost-recommendations-5.71.0.tgz +0 -0
  68. package/components/tryghost-referrers-5.71.0.tgz +0 -0
  69. package/components/{tryghost-security-5.70.2.tgz → tryghost-security-5.71.0.tgz} +0 -0
  70. package/components/{tryghost-session-service-5.70.2.tgz → tryghost-session-service-5.71.0.tgz} +0 -0
  71. package/components/tryghost-settings-path-manager-5.71.0.tgz +0 -0
  72. package/components/tryghost-slack-notifications-5.71.0.tgz +0 -0
  73. package/components/{tryghost-staff-service-5.70.2.tgz → tryghost-staff-service-5.71.0.tgz} +0 -0
  74. package/components/tryghost-stats-service-5.71.0.tgz +0 -0
  75. package/components/{tryghost-tiers-5.70.2.tgz → tryghost-tiers-5.71.0.tgz} +0 -0
  76. package/components/{tryghost-update-check-service-5.70.2.tgz → tryghost-update-check-service-5.71.0.tgz} +0 -0
  77. package/components/{tryghost-verification-trigger-5.70.2.tgz → tryghost-verification-trigger-5.71.0.tgz} +0 -0
  78. package/components/{tryghost-version-notifications-data-service-5.70.2.tgz → tryghost-version-notifications-data-service-5.71.0.tgz} +0 -0
  79. package/components/tryghost-webmentions-5.71.0.tgz +0 -0
  80. package/content/themes/source/assets/built/screen.css +1 -1
  81. package/content/themes/source/assets/built/screen.css.map +1 -1
  82. package/content/themes/source/assets/css/screen.css +105 -2
  83. package/content/themes/source/package.json +1 -1
  84. package/content/themes/source/partials/components/post-list.hbs +28 -19
  85. package/core/built/admin/assets/admin-x-settings/{CodeEditorView-631aaa10.mjs → CodeEditorView-cf9b94da.mjs} +2 -2
  86. package/core/built/admin/assets/admin-x-settings/admin-x-settings.js +2 -2
  87. package/core/built/admin/assets/admin-x-settings/{index-cd9d0460.mjs → index-2cbdc6fc.mjs} +5764 -5641
  88. package/core/built/admin/assets/admin-x-settings/{limit-service-dad09b0e.mjs → limit-service-c2ca5332.mjs} +4862 -5021
  89. package/core/built/admin/assets/admin-x-settings/{modals-64706b26.mjs → modals-3c8a0931.mjs} +2282 -2283
  90. package/core/built/admin/assets/{chunk.143.fdd6a7bdd3230f22bf24.js → chunk.143.dd35d008afe4417cb7b6.js} +11 -11
  91. package/core/built/admin/assets/{chunk.178.6aba419f407d82a06217.js → chunk.178.5c10121aa029f6b9fab7.js} +4 -4
  92. package/core/built/admin/assets/{chunk.334.3498cc12ebd02c179e3a.js → chunk.338.a23271afc734a6de1d3b.js} +7154 -6587
  93. package/core/built/admin/assets/{chunk.334.3498cc12ebd02c179e3a.js.LICENSE.txt → chunk.338.a23271afc734a6de1d3b.js.LICENSE.txt} +7 -0
  94. package/core/built/admin/assets/{ghost-71766888f233d8996c2171e03257c940.js → ghost-a43c6dbe8d871a5929a0c4ccb54d391e.js} +22 -21
  95. package/core/built/admin/assets/koenig-lexical/koenig-lexical.js +15657 -15678
  96. package/core/built/admin/assets/koenig-lexical/koenig-lexical.umd.js +128 -128
  97. package/core/built/admin/index.html +4 -4
  98. package/core/frontend/helpers/ghost_head.js +1 -1
  99. package/core/frontend/helpers/tpl/recommendations.hbs +5 -1
  100. package/core/frontend/services/routing/controllers/unsubscribe.js +41 -1
  101. package/core/server/api/endpoints/utils/serializers/input/pages.js +2 -5
  102. package/core/server/api/endpoints/utils/serializers/input/posts.js +2 -5
  103. package/core/server/lib/lexical.js +22 -0
  104. package/core/server/models/post.js +7 -2
  105. package/core/shared/labs.js +4 -3
  106. package/package.json +157 -157
  107. package/yarn.lock +387 -248
  108. package/components/tryghost-adapter-cache-memory-ttl-5.70.2.tgz +0 -0
  109. package/components/tryghost-announcement-bar-settings-5.70.2.tgz +0 -0
  110. package/components/tryghost-api-framework-5.70.2.tgz +0 -0
  111. package/components/tryghost-bootstrap-socket-5.70.2.tgz +0 -0
  112. package/components/tryghost-collections-5.70.2.tgz +0 -0
  113. package/components/tryghost-constants-5.70.2.tgz +0 -0
  114. package/components/tryghost-custom-theme-settings-service-5.70.2.tgz +0 -0
  115. package/components/tryghost-donations-5.70.2.tgz +0 -0
  116. package/components/tryghost-dynamic-routing-events-5.70.2.tgz +0 -0
  117. package/components/tryghost-email-content-generator-5.70.2.tgz +0 -0
  118. package/components/tryghost-email-service-5.70.2.tgz +0 -0
  119. package/components/tryghost-email-suppression-list-5.70.2.tgz +0 -0
  120. package/components/tryghost-event-aware-cache-wrapper-5.70.2.tgz +0 -0
  121. package/components/tryghost-express-dynamic-redirects-5.70.2.tgz +0 -0
  122. package/components/tryghost-extract-api-key-5.70.2.tgz +0 -0
  123. package/components/tryghost-i18n-5.70.2.tgz +0 -0
  124. package/components/tryghost-importer-revue-5.70.2.tgz +0 -0
  125. package/components/tryghost-link-replacer-5.70.2.tgz +0 -0
  126. package/components/tryghost-mail-events-5.70.2.tgz +0 -0
  127. package/components/tryghost-mailgun-client-5.70.2.tgz +0 -0
  128. package/components/tryghost-member-attribution-5.70.2.tgz +0 -0
  129. package/components/tryghost-members-ssr-5.70.2.tgz +0 -0
  130. package/components/tryghost-model-to-domain-event-interceptor-5.70.2.tgz +0 -0
  131. package/components/tryghost-mw-api-version-mismatch-5.70.2.tgz +0 -0
  132. package/components/tryghost-mw-cache-control-5.70.2.tgz +0 -0
  133. package/components/tryghost-mw-error-handler-5.70.2.tgz +0 -0
  134. package/components/tryghost-mw-session-from-token-5.70.2.tgz +0 -0
  135. package/components/tryghost-mw-update-user-last-seen-5.70.2.tgz +0 -0
  136. package/components/tryghost-mw-version-match-5.70.2.tgz +0 -0
  137. package/components/tryghost-mw-vhost-5.70.2.tgz +0 -0
  138. package/components/tryghost-post-events-5.70.2.tgz +0 -0
  139. package/components/tryghost-post-revisions-5.70.2.tgz +0 -0
  140. package/components/tryghost-recommendations-5.70.2.tgz +0 -0
  141. package/components/tryghost-referrers-5.70.2.tgz +0 -0
  142. package/components/tryghost-settings-path-manager-5.70.2.tgz +0 -0
  143. package/components/tryghost-slack-notifications-5.70.2.tgz +0 -0
  144. package/components/tryghost-stats-service-5.70.2.tgz +0 -0
  145. package/components/tryghost-webmentions-5.70.2.tgz +0 -0
@@ -5,6 +5,13 @@ https://github.com/mholt/PapaParse
5
5
  License: MIT
6
6
  */
7
7
 
8
+ /*!
9
+ localForage -- Offline Storage, Improved
10
+ Version 1.10.0
11
+ https://localforage.github.io/localForage
12
+ (c) 2013-2017 Mozilla, Apache License 2.0
13
+ */
14
+
8
15
  /*!
9
16
  * The buffer module from node.js, for the browser.
10
17
  *
@@ -1830,7 +1830,7 @@ class k extends n.default.Component{constructor(...e){super(...e),y(this,"state"
1830
1830
  return n.default.createElement(i,v({nodes:r},t))},P=({editorResource:e,...t})=>{const{KoenigComposableEditor:i,MINIMAL_TRANSFORMERS:r}=e.read()
1831
1831
  return n.default.createElement(i,v({markdownTransformers:r},t))},O=({editorResource:e,...t})=>{const{HtmlOutputPlugin:i}=e.read()
1832
1832
  return n.default.createElement(i,t)}
1833
- let j=(a=Ember.inject.service,s=Ember.inject.service,o=Ember.inject.service,l=Ember.inject.service,u=Ember._action,c=class extends i.default{constructor(...e){super(...e),g(this,"ajax",d,this),g(this,"feature",p,this),g(this,"koenig",m,this),g(this,"session",h,this),g(this,"config",b,this),y(this,"editorResource",this.koenig.resource),y(this,"ReactComponent",(e=>n.default.createElement("div",{className:["koenig-react-editor",this.args.className].filter(Boolean).join(" ")},n.default.createElement(k,null,n.default.createElement(n.Suspense,{fallback:n.default.createElement("p",{className:"koenig-react-editor-loading"},"Loading editor...")},n.default.createElement(E,{editorResource:this.editorResource,initialEditorState:this.args.lexical,onError:this.onError},n.default.createElement(P,{editorResource:this.editorResource,darkMode:this.feature.nightShift,onChange:e.onChange,onBlur:e.onBlur,onFocus:e.onFocus,isSnippetsEnabled:!1,singleParagraph:!0,className:"koenig-lexical-editor-input",placeholderText:e.placeholderText,placeholderClassName:"koenig-lexical-editor-input-placeholder"},n.default.createElement(O,{editorResource:this.editorResource,html:e.html,setHtml:e.onChangeHtml}))))))))}onError(e){console.error(e),this.config.sentry_dsn&&t.captureException(e,{tags:{lexical:!0}})}},d=f(c.prototype,"ajax",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=f(c.prototype,"feature",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=f(c.prototype,"koenig",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=f(c.prototype,"session",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=f(c.prototype,"config",[r.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f(c.prototype,"onError",[u],Object.getOwnPropertyDescriptor(c.prototype,"onError"),c.prototype),c)
1833
+ let j=(a=Ember.inject.service,s=Ember.inject.service,o=Ember.inject.service,l=Ember.inject.service,u=Ember._action,c=class extends i.default{constructor(...e){super(...e),g(this,"ajax",d,this),g(this,"feature",p,this),g(this,"koenig",m,this),g(this,"session",h,this),g(this,"config",b,this),y(this,"editorResource",this.koenig.resource),y(this,"ReactComponent",(e=>n.default.createElement("div",{className:["koenig-react-editor",this.args.className].filter(Boolean).join(" ")},n.default.createElement(k,null,n.default.createElement(n.Suspense,{fallback:n.default.createElement("p",{className:"koenig-react-editor-loading"},"Loading editor...")},n.default.createElement(E,{editorResource:this.editorResource,initialEditorState:this.args.lexical,onError:this.onError},n.default.createElement(P,{editorResource:this.editorResource,darkMode:this.feature.nightShift,onChange:e.onChange,onBlur:e.onBlur,onFocus:e.onFocus,isSnippetsEnabled:!1,singleParagraph:!0,className:"koenig-lexical-editor-input "+(this.feature.nightShift?"dark":""),placeholderText:e.placeholderText,placeholderClassName:"koenig-lexical-editor-input-placeholder"},n.default.createElement(O,{editorResource:this.editorResource,html:e.html,setHtml:e.onChangeHtml}))))))))}onError(e){console.error(e),this.config.sentry_dsn&&t.captureException(e,{tags:{lexical:!0}})}},d=f(c.prototype,"ajax",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=f(c.prototype,"feature",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=f(c.prototype,"koenig",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=f(c.prototype,"session",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=f(c.prototype,"config",[r.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f(c.prototype,"onError",[u],Object.getOwnPropertyDescriptor(c.prototype,"onError"),c.prototype),c)
1834
1834
  e.default=j,Ember._setComponentTemplate(w,j)}))
1835
1835
  define("ghost-admin/components/koenig-lexical-editor",["exports","@sentry/ember","@glimmer/component","react","fetch","ghost-admin/utils/ghost-paths","ghost-admin/decorators/inject","ember-concurrency"],(function(e,t,i,n,r,a,s,o){var l,u,c,d,p,m,h,b,g,f,v,y,w,k,E,P,O,j,_,T,z
1836
1836
  function x(e,t,i,n){i&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(n):void 0})}function S(e,t,i,n,r){var a={}
@@ -1853,7 +1853,7 @@ t.searchParams.append("key",this.contentKey),t.searchParams.append("collection",
1853
1853
  const i=await(0,r.default)(t.toString()),{posts:n}=await i.json()
1854
1854
  return n},fetchAutocompleteLinks:async()=>{const e=await this.fetchOffersTask.perform(),t=[{label:"Homepage",value:window.location.origin+"/"},{label:"Free signup",value:"#/portal/signup/free"}],i=e.toArray().map((e=>({label:`Offer - ${e.name}`,value:this.config.getSiteUrl(e.code)})))
1855
1855
  return[...t,...(()=>{let e=[]
1856
- return this.membersUtils.paidMembersEnabled&&(e=[{label:"Paid signup",value:"#/portal/signup"},{label:"Upgrade or change plan",value:"#/portal/account/plans"}]),e})(),...(()=>this.feature.tipsAndDonations&&this.settings.donationsEnabled?[{label:"Tip or donation",value:"#/portal/support"}]:[])(),...(()=>this.settings.recommendationsEnabled?[{label:"Recommendations",value:"#/portal/recommendations"}]:[])(),...i]},fetchLabels:async()=>(await this.fetchLabelsTask.perform()).map((e=>e.name)),feature:{collectionsCard:this.feature.get("collectionsCard"),collections:this.feature.get("collections")},depreciated:{headerV1:!0},membersEnabled:"all"===this.settings.get("membersSignupAccess"),siteTitle:this.settings.title,siteDescription:this.settings.description},s=Object.assign({},i,e.cardConfig,{pinturaConfig:this.pinturaConfig}),o=this.feature.lexicalMultiplayer&&!s.post.isNew,l=("https:"===window.location.protocol?"wss:":"ws:")+window.location.host+this.ghostPaths.url.api("posts","multiplayer"),u=s.post.id,c=this.session.user.name
1856
+ return this.membersUtils.paidMembersEnabled&&(e=[{label:"Paid signup",value:"#/portal/signup"},{label:"Upgrade or change plan",value:"#/portal/account/plans"}]),e})(),...(()=>this.feature.tipsAndDonations&&this.settings.donationsEnabled?[{label:"Tip or donation",value:"#/portal/support"}]:[])(),...(()=>this.settings.recommendationsEnabled?[{label:"Recommendations",value:"#/portal/recommendations"}]:[])(),...i]},fetchLabels:async()=>(await this.fetchLabelsTask.perform()).map((e=>e.name)),feature:{collectionsCard:this.feature.get("collectionsCard"),collections:this.feature.get("collections"),emojiPicker:this.feature.get("editorEmojiPicker")},depreciated:{headerV1:!0},membersEnabled:"all"===this.settings.get("membersSignupAccess"),siteTitle:this.settings.title,siteDescription:this.settings.description},s=Object.assign({},i,e.cardConfig,{pinturaConfig:this.pinturaConfig}),o=this.feature.lexicalMultiplayer&&!s.post.isNew,l=("https:"===window.location.protocol?"wss:":"ws:")+window.location.host+this.ghostPaths.url.api("posts","multiplayer"),u=s.post.id,c=this.session.user.name
1857
1857
  return n.default.createElement("div",{className:["koenig-react-editor","koenig-lexical",this.args.className].filter(Boolean).join(" ")},n.default.createElement(A,null,n.default.createElement(n.Suspense,{fallback:n.default.createElement("p",{className:"koenig-react-editor-loading"},"Loading editor...")},n.default.createElement(I,{editorResource:this.editorResource,cardConfig:s,enableMultiplayer:o,fileUploader:{useFileUpload:(e="image")=>{const[t,i]=n.default.useState(0),[r,s]=n.default.useState(!1),[o,l]=n.default.useState([]),[u,c]=n.default.useState(0),d=n.default.useRef(new Map)
1858
1858
  function p(){if(0===d.current.size)return void i(0)
1859
1859
  let e=0
@@ -4642,16 +4642,17 @@ Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
4642
4642
  let a=(i=Ember.inject.service,n=class extends t.default{constructor(...e){var t,i,n,a
4643
4643
  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})}beforeModel(){if(super.beforeModel(...arguments),!this.session.user.isAdmin)return this.transitionTo("home")}},s=n.prototype,o="session",l=[i],u={configurable:!0,enumerable:!0,writable:!0,initializer:null},d={},Object.keys(u).forEach((function(e){d[e]=u[e]})),d.enumerable=!!d.enumerable,d.configurable=!!d.configurable,("value"in d||d.initializer)&&(d.writable=!0),d=l.slice().reverse().reduce((function(e,t){return t(s,o,e)||e}),d),c&&void 0!==d.initializer&&(d.value=d.initializer?d.initializer.call(c):void 0,d.initializer=void 0),void 0===d.initializer&&(Object.defineProperty(s,o,d),d=null),r=d,n)
4644
4644
  var s,o,l,u,c,d
4645
- e.default=a})),define("ghost-admin/routes/application",["exports","ember-simple-auth/configuration","react","react-dom","ghost-admin/mixins/shortcuts-route","ghost-admin/utils/ctrl-or-cmd","ghost-admin/utils/window-proxy","@sentry/ember","ghost-admin/components/admin-x/settings","ghost-admin/decorators/inject","ember-ajax/errors","ghost-admin/services/ajax"],(function(e,t,i,n,r,a,s,o,l,u,c,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
4646
- let p={esc:{action:"closeMenus",scope:"default"}}
4647
- p[`${a.default}+s`]={action:"save",scope:"all"},window.React=i.default,window.ReactDOM=n.default
4648
- var m=Ember.Route.extend(r.default,{ajax:Ember.inject.service(),configManager:Ember.inject.service(),feature:Ember.inject.service(),ghostPaths:Ember.inject.service(),notifications:Ember.inject.service(),router:Ember.inject.service(),session:Ember.inject.service(),settings:Ember.inject.service(),ui:Ember.inject.service(),whatsNew:Ember.inject.service(),billing:Ember.inject.service(),shortcuts:p,routeAfterAuthentication:"home",init(){this._super(...arguments),this.router.on("routeDidChange",(()=>{this.notifications.displayDelayed()})),this.ui.initBodyDragHandlers()},config:(0,u.inject)(),async beforeModel(){return await this.session.setup(),this.prepareApp()},async afterModel(e,t){this._super(...arguments),this.get("session.isAuthenticated")&&(this.session.appLoadTransition=t),this._appLoaded=!0},actions:{closeMenus(){this.ui.closeMenus()},didTransition(){this.session.appLoadTransition=null,this.send("closeMenus")},authorizationFailed(){s.default.replaceLocation(t.default.rootURL)},save:function(){return this},error(e,t){if((0,c.isUnauthorizedError)(e))return!1
4649
- if((0,c.isNotFoundError)(e)){t&&t.abort()
4645
+ e.default=a})),define("ghost-admin/routes/application",["exports","@sentry/ember","ember-simple-auth/configuration","react","react-dom","ghost-admin/mixins/shortcuts-route","ghost-admin/utils/ctrl-or-cmd","ghost-admin/utils/window-proxy","@sentry/integrations","ghost-admin/components/admin-x/settings","ghost-admin/decorators/inject","ember-ajax/errors","ghost-admin/services/ajax"],(function(e,t,i,n,r,a,s,o,l,u,c,d,p){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
4646
+ let m={esc:{action:"closeMenus",scope:"default"}}
4647
+ m[`${s.default}+s`]={action:"save",scope:"all"},window.React=n.default,window.ReactDOM=r.default
4648
+ var h=Ember.Route.extend(a.default,{ajax:Ember.inject.service(),configManager:Ember.inject.service(),feature:Ember.inject.service(),ghostPaths:Ember.inject.service(),notifications:Ember.inject.service(),router:Ember.inject.service(),session:Ember.inject.service(),settings:Ember.inject.service(),ui:Ember.inject.service(),whatsNew:Ember.inject.service(),billing:Ember.inject.service(),shortcuts:m,routeAfterAuthentication:"home",init(){this._super(...arguments),this.router.on("routeDidChange",(()=>{this.notifications.displayDelayed()})),this.ui.initBodyDragHandlers()},config:(0,c.inject)(),async beforeModel(){return await this.session.setup(),this.prepareApp()},async afterModel(e,t){this._super(...arguments),this.get("session.isAuthenticated")&&(this.session.appLoadTransition=t),this._appLoaded=!0},actions:{closeMenus(){this.ui.closeMenus()},didTransition(){this.session.appLoadTransition=null,this.send("closeMenus"),Ember.run.later((()=>{t.setTag("route",this.router.currentRouteName),t.setTag("path",this.router.currentURL)}),2)},authorizationFailed(){o.default.replaceLocation(i.default.rootURL)},save:function(){return this},error(e,t){if((0,d.isUnauthorizedError)(e))return!1
4649
+ if((0,d.isNotFoundError)(e)){t&&t.abort()
4650
4650
  let e=t.to,i=this.router,n=[]
4651
4651
  for(let t of Object.keys(e.params))n.push(e.params[t])
4652
4652
  let r=i.urlFor(e.name,...n).replace(/^#\//,"").replace(/^\//,"").replace(/^ghost\//,"")
4653
- return this.replaceWith("error404",r)}return(!(0,d.isVersionMismatchError)(e)||(t&&t.abort(),this.upgradeStatus.requireUpgrade(),!this._appLoaded))&&((!(0,d.isMaintenanceError)(e)||(t&&t.abort(),this.upgradeStatus.maintenanceAlert(),!this._appLoaded))&&!(((0,c.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&&(0,o.InitSentryForEmber)({dsn:this.config.sentry_dsn,environment:this.config.sentry_env,release:`ghost@${this.config.version}`,beforeSend:e=>(e.tags=e.tags||{},e.tags.shown_to_user=e.tags.shown_to_user||!1,e.tags.grammarly=!!document.querySelector("[data-gr-ext-installed]"),e),ignoreErrors:[/^TransitionAborted$/]}),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(l.importSettings,1e3)}})
4654
- e.default=m})),define("ghost-admin/routes/authenticated",["exports"],(function(e){var t,i,n
4653
+ return this.replaceWith("error404",r)}return(!(0,p.isVersionMismatchError)(e)||(t&&t.abort(),this.upgradeStatus.requireUpgrade(),!this._appLoaded))&&((!(0,p.isMaintenanceError)(e)||(t&&t.abort(),this.upgradeStatus.maintenanceAlert(),!this._appLoaded))&&!(((0,d.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 e={dsn:this.config.sentry_dsn,environment:this.config.sentry_env,release:`ghost@${this.config.version}`,beforeSend:e=>(e.tags=e.tags||{},e.tags.shown_to_user=e.tags.shown_to_user||!1,e.tags.grammarly=!!document.querySelector("[data-gr-ext-installed]"),e),ignoreErrors:[/^TransitionAborted$/]}
4654
+ "development"===this.config.sentry_env&&(e.integrations=[new l.Debug]),t.init(e)}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(u.importSettings,1e3)}})
4655
+ e.default=h})),define("ghost-admin/routes/authenticated",["exports"],(function(e){var t,i,n
4655
4656
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
4656
4657
  let r=(t=Ember.inject.service,i=class extends Ember.Route{constructor(...e){var t,i,r,a
4657
4658
  super(...e),t=this,i="session",a=this,(r=n)&&Object.defineProperty(t,i,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0})}async beforeModel(e){this.session.requireAuthentication(e,"signin")}},a=i.prototype,s="session",o=[t],l={configurable:!0,enumerable:!0,writable:!0,initializer:null},c={},Object.keys(l).forEach((function(e){c[e]=l[e]})),c.enumerable=!!c.enumerable,c.configurable=!!c.configurable,("value"in c||c.initializer)&&(c.writable=!0),c=o.slice().reverse().reduce((function(e,t){return t(a,s,e)||e}),c),u&&void 0!==c.initializer&&(c.value=c.initializer?c.initializer.call(u):void 0,c.initializer=void 0),void 0===c.initializer&&(Object.defineProperty(a,s,c),c=null),n=c,i)
@@ -5601,23 +5602,23 @@ return this.ghostPaths.url.join(e.host,t).replace(/\/$/,"")}get iframeURL(){let
5601
5602
  if(window.location.hash&&window.location.hash.includes(this.exploreRouteRoot)){let t=window.location.hash.replace(this.exploreRouteRoot,"")
5602
5603
  t&&!t.includes("connect")&&(e+=t.replace(/^\//,""))}return e}constructor(){super(...arguments),g(this,"router",u,this),g(this,"feature",c,this),g(this,"ghostPaths",d,this),g(this,"config",p,this),f(this,"exploreUrl","https://ghost.org/explore/"),f(this,"exploreRouteRoot","#/explore"),f(this,"submitRoute","submit"),g(this,"exploreWindowOpen",m,this),g(this,"siteData",h,this),g(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
5603
5604
  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}),c=v(l.prototype,"feature",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=v(l.prototype,"ghostPaths",[r],{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)
5604
- e.default=y})),define("ghost-admin/services/feature",["exports","jquery","ghost-admin/decorators/inject"],(function(e,t,i){var n,r,a,s,o,l,u,c,d,p,m,h,b,g,f,v,y,w,k,E,P,O,j,_,T,z,x,S,C,M,D,A,I,L,N,R,U,F,B,V,H,q,$,Y,W,G,K,J,X,Z,Q,ee,te,ie,ne,re
5605
- function ae(e,t,i,n){i&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(n):void 0})}function se(e,t,i){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e
5605
+ e.default=y})),define("ghost-admin/services/feature",["exports","jquery","ghost-admin/decorators/inject"],(function(e,t,i){var n,r,a,s,o,l,u,c,d,p,m,h,b,g,f,v,y,w,k,E,P,O,j,_,T,z,x,S,C,M,D,A,I,L,N,R,U,F,B,V,H,q,$,Y,W,G,K,J,X,Z,Q,ee,te,ie,ne,re,ae,se
5606
+ function oe(e,t,i,n){i&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(n):void 0})}function le(e,t,i){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e
5606
5607
  var i=e[Symbol.toPrimitive]
5607
5608
  if(void 0!==i){var n=i.call(e,t||"default")
5608
5609
  if("object"!=typeof n)return n
5609
5610
  throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string")
5610
- 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 oe(e,t,i,n,r){var a={}
5611
- return Object.keys(n).forEach((function(e){a[e]=n[e]})),a.enumerable=!!a.enumerable,a.configurable=!!a.configurable,("value"in a||a.initializer)&&(a.writable=!0),a=i.slice().reverse().reduce((function(i,n){return n(e,t,i)||i}),a),r&&void 0!==a.initializer&&(a.value=a.initializer?a.initializer.call(r):void 0,a.initializer=void 0),void 0===a.initializer&&(Object.defineProperty(e,t,a),a=null),a}function le(e,t={}){let{user:i,onChange:n}=t,r=i?[`accessibility.${e}`]:[`config.${e}`,`labs.${e}`]
5611
+ 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 ue(e,t,i,n,r){var a={}
5612
+ return Object.keys(n).forEach((function(e){a[e]=n[e]})),a.enumerable=!!a.enumerable,a.configurable=!!a.configurable,("value"in a||a.initializer)&&(a.writable=!0),a=i.slice().reverse().reduce((function(i,n){return n(e,t,i)||i}),a),r&&void 0!==a.initializer&&(a.value=a.initializer?a.initializer.call(r):void 0,a.initializer=void 0),void 0===a.initializer&&(Object.defineProperty(e,t,a),a=null),a}function ce(e,t={}){let{user:i,onChange:n}=t,r=i?[`accessibility.${e}`]:[`config.${e}`,`labs.${e}`]
5612
5613
  return Ember.computed.apply(Ember,r.concat({get(){let t=!1
5613
- 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),n&&this.get(n).bind(this)(i),i}}))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.feature=le
5614
- let ue=(n=Ember.inject.service,r=Ember.inject.service,a=Ember.inject.service,s=Ember.inject.service,o=Ember.inject.service,l=le("emailAnalytics"),u=le("nightShift",{user:!0,onChange:"_setAdminTheme"}),c=le("referralInviteDismissed",{user:!0}),d=le("urlCache"),p=le("lexicalMultiplayer"),m=le("audienceFeedback"),h=le("webmentions"),b=le("websockets"),g=le("stripeAutomaticTax"),f=le("emailCustomization"),v=le("i18n"),y=le("announcementBar"),w=le("signupCard"),k=le("signupForm"),E=le("collections"),P=le("mailEvents"),O=le("collectionsCard"),j=le("importMemberTier"),_=le("tipsAndDonations"),T=le("recommendations"),z=le("lexicalIndicators"),x=Ember.computed("settings.labs"),S=Ember.computed("_user.accessibility"),C=class extends Ember.Service{constructor(...e){super(...e),ae(this,"lazyLoader",M,this),ae(this,"notifications",D,this),ae(this,"session",A,this),ae(this,"settings",I,this),ae(this,"store",L,this),ae(this,"config",N,this),ae(this,"emailAnalytics",R,this),ae(this,"nightShift",U,this),ae(this,"referralInviteDismissed",F,this),ae(this,"urlCache",B,this),ae(this,"lexicalMultiplayer",V,this),ae(this,"audienceFeedback",H,this),ae(this,"webmentions",q,this),ae(this,"websockets",$,this),ae(this,"stripeAutomaticTax",Y,this),ae(this,"emailCustomization",W,this),ae(this,"i18n",G,this),ae(this,"announcementBar",K,this),ae(this,"signupCard",J,this),ae(this,"signupForm",X,this),ae(this,"collections",Z,this),ae(this,"mailEvents",Q,this),ae(this,"collectionsCard",ee,this),ae(this,"importMemberTier",te,this),ae(this,"tipsAndDonations",ie,this),ae(this,"recommendations",ne,this),ae(this,"lexicalIndicators",re,this),se(this,"_user",null)}get labs(){let e=this.settings.labs
5614
+ 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),n&&this.get(n).bind(this)(i),i}}))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.feature=ce
5615
+ let de=(n=Ember.inject.service,r=Ember.inject.service,a=Ember.inject.service,s=Ember.inject.service,o=Ember.inject.service,l=ce("emailAnalytics"),u=ce("nightShift",{user:!0,onChange:"_setAdminTheme"}),c=ce("referralInviteDismissed",{user:!0}),d=ce("urlCache"),p=ce("lexicalMultiplayer"),m=ce("audienceFeedback"),h=ce("webmentions"),b=ce("websockets"),g=ce("stripeAutomaticTax"),f=ce("emailCustomization"),v=ce("i18n"),y=ce("announcementBar"),w=ce("signupCard"),k=ce("signupForm"),E=ce("collections"),P=ce("mailEvents"),O=ce("collectionsCard"),j=ce("importMemberTier"),_=ce("tipsAndDonations"),T=ce("recommendations"),z=ce("lexicalIndicators"),x=ce("editorEmojiPicker"),S=Ember.computed("settings.labs"),C=Ember.computed("_user.accessibility"),M=class extends Ember.Service{constructor(...e){super(...e),oe(this,"lazyLoader",D,this),oe(this,"notifications",A,this),oe(this,"session",I,this),oe(this,"settings",L,this),oe(this,"store",N,this),oe(this,"config",R,this),oe(this,"emailAnalytics",U,this),oe(this,"nightShift",F,this),oe(this,"referralInviteDismissed",B,this),oe(this,"urlCache",V,this),oe(this,"lexicalMultiplayer",H,this),oe(this,"audienceFeedback",q,this),oe(this,"webmentions",$,this),oe(this,"websockets",Y,this),oe(this,"stripeAutomaticTax",W,this),oe(this,"emailCustomization",G,this),oe(this,"i18n",K,this),oe(this,"announcementBar",J,this),oe(this,"signupCard",X,this),oe(this,"signupForm",Z,this),oe(this,"collections",Q,this),oe(this,"mailEvents",ee,this),oe(this,"collectionsCard",te,this),oe(this,"importMemberTier",ie,this),oe(this,"tipsAndDonations",ne,this),oe(this,"recommendations",re,this),oe(this,"lexicalIndicators",ae,this),oe(this,"editorEmojiPicker",se,this),le(this,"_user",null)}get labs(){let e=this.settings.labs
5615
5616
  try{return JSON.parse(e)||{}}catch(t){return{}}}get accessibility(){let e=this.get("_user.accessibility")
5616
5617
  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 n=i.user?"accessibility":"labs",r=this.get(i.user?"_user":"settings"),a=this.get(n)
5617
5618
  return Ember.set(a,e,t),i.requires&&!0===t&&i.requires.forEach((e=>{Ember.set(a,e,!0)})),r.set(n,JSON.stringify(a)),r.save().then((()=>(this.notifyPropertyChange(n),this.get(`${n}.${e}`)))).catch((t=>{if(r.rollbackAttributes(),this.notifyPropertyChange(n),!t)throw new Ember.Error(`Validation of the feature service ${i.user?"user":"settings"} model failed when updating ${n}.`)
5618
5619
  return this.notifications.showAPIError(t),this.get(`${n}.${e}`)}))}_setAdminTheme(e){let i=e
5619
- return void 0===i&&(i=e||this.nightShift),this.lazyLoader.loadStyle("dark","assets/ghost-dark-114b1812a92f63449e10acf799cd2664.css",!0).then((()=>{(0,t.default)("link[title=dark]").prop("disabled",!i)})).catch((()=>{(0,t.default)("link[title=dark]").prop("disabled",!0)}))}},M=oe(C.prototype,"lazyLoader",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=oe(C.prototype,"notifications",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=oe(C.prototype,"session",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I=oe(C.prototype,"settings",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L=oe(C.prototype,"store",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=oe(C.prototype,"config",[i.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),R=oe(C.prototype,"emailAnalytics",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),U=oe(C.prototype,"nightShift",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),F=oe(C.prototype,"referralInviteDismissed",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),B=oe(C.prototype,"urlCache",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),V=oe(C.prototype,"lexicalMultiplayer",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),H=oe(C.prototype,"audienceFeedback",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),q=oe(C.prototype,"webmentions",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),$=oe(C.prototype,"websockets",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Y=oe(C.prototype,"stripeAutomaticTax",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),W=oe(C.prototype,"emailCustomization",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),G=oe(C.prototype,"i18n",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),K=oe(C.prototype,"announcementBar",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),J=oe(C.prototype,"signupCard",[w],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),X=oe(C.prototype,"signupForm",[k],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Z=oe(C.prototype,"collections",[E],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Q=oe(C.prototype,"mailEvents",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ee=oe(C.prototype,"collectionsCard",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),te=oe(C.prototype,"importMemberTier",[j],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ie=oe(C.prototype,"tipsAndDonations",[_],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ne=oe(C.prototype,"recommendations",[T],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),re=oe(C.prototype,"lexicalIndicators",[z],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),oe(C.prototype,"labs",[x],Object.getOwnPropertyDescriptor(C.prototype,"labs"),C.prototype),oe(C.prototype,"accessibility",[S],Object.getOwnPropertyDescriptor(C.prototype,"accessibility"),C.prototype),C)
5620
- e.default=ue})),define("ghost-admin/services/frontend",["exports","fetch","validator","ghost-admin/decorators/inject"],(function(e,t,i,n){var r,a,s,o,l,u
5620
+ return void 0===i&&(i=e||this.nightShift),this.lazyLoader.loadStyle("dark","assets/ghost-dark-114b1812a92f63449e10acf799cd2664.css",!0).then((()=>{(0,t.default)("link[title=dark]").prop("disabled",!i)})).catch((()=>{(0,t.default)("link[title=dark]").prop("disabled",!0)}))}},D=ue(M.prototype,"lazyLoader",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=ue(M.prototype,"notifications",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I=ue(M.prototype,"session",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L=ue(M.prototype,"settings",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=ue(M.prototype,"store",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),R=ue(M.prototype,"config",[i.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),U=ue(M.prototype,"emailAnalytics",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),F=ue(M.prototype,"nightShift",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),B=ue(M.prototype,"referralInviteDismissed",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),V=ue(M.prototype,"urlCache",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),H=ue(M.prototype,"lexicalMultiplayer",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),q=ue(M.prototype,"audienceFeedback",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),$=ue(M.prototype,"webmentions",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Y=ue(M.prototype,"websockets",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),W=ue(M.prototype,"stripeAutomaticTax",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),G=ue(M.prototype,"emailCustomization",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),K=ue(M.prototype,"i18n",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),J=ue(M.prototype,"announcementBar",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),X=ue(M.prototype,"signupCard",[w],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Z=ue(M.prototype,"signupForm",[k],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Q=ue(M.prototype,"collections",[E],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ee=ue(M.prototype,"mailEvents",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),te=ue(M.prototype,"collectionsCard",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ie=ue(M.prototype,"importMemberTier",[j],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ne=ue(M.prototype,"tipsAndDonations",[_],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),re=ue(M.prototype,"recommendations",[T],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ae=ue(M.prototype,"lexicalIndicators",[z],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),se=ue(M.prototype,"editorEmojiPicker",[x],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ue(M.prototype,"labs",[S],Object.getOwnPropertyDescriptor(M.prototype,"labs"),M.prototype),ue(M.prototype,"accessibility",[C],Object.getOwnPropertyDescriptor(M.prototype,"accessibility"),M.prototype),M)
5621
+ e.default=de})),define("ghost-admin/services/frontend",["exports","fetch","validator","ghost-admin/decorators/inject"],(function(e,t,i,n){var r,a,s,o,l,u
5621
5622
  function c(e,t,i,n){i&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(n):void 0})}function d(e,t,i){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e
5622
5623
  var i=e[Symbol.toPrimitive]
5623
5624
  if(void 0!==i){var n=i.call(e,t||"default")
@@ -5839,7 +5840,7 @@ return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:i
5839
5840
  return Object.keys(n).forEach((function(e){a[e]=n[e]})),a.enumerable=!!a.enumerable,a.configurable=!!a.configurable,("value"in a||a.initializer)&&(a.writable=!0),a=i.slice().reverse().reduce((function(i,n){return n(e,t,i)||i}),a),r&&void 0!==a.initializer&&(a.value=a.initializer?a.initializer.call(r):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
5840
5841
  let U=(a=Ember.inject.service,s=Ember.inject.service("store"),o=Ember.inject.service,l=Ember.inject.service,u=Ember.inject.service,c=Ember.inject.service,d=Ember.inject.service,p=Ember.inject.service,m=Ember.inject.service,h=Ember.inject.service,b=Ember.inject.service,g=Ember.inject.service,f=Ember.inject.service,v=Ember._tracked,y=(0,r.task)({drop:!0}),w=class extends t.default{constructor(...e){super(...e),L(this,"configManager",k,this),L(this,"dataStore",E,this),L(this,"feature",P,this),L(this,"koenig",O,this),L(this,"notifications",j,this),L(this,"router",_,this),L(this,"frontend",T,this),L(this,"settings",z,this),L(this,"ui",x,this),L(this,"upgradeStatus",S,this),L(this,"whatsNew",C,this),L(this,"membersUtils",M,this),L(this,"themeManagement",D,this),L(this,"config",A,this),L(this,"user",I,this),N(this,"skipAuthSuccessHandler",!1)}async populateUser(e={}){if(this.user)return
5841
5842
  const t=e.id||"me",i=await this.dataStore.queryRecord("user",{id:t})
5842
- this.user=i}async postAuthPreparation(){await Ember.RSVP.all([this.configManager.fetchAuthenticated(),this.feature.fetch(),this.settings.fetch(),this.membersUtils.fetch()]),this.themeManagement.fetch().catch(console.error),await this.frontend.loginIfNeeded(),this.config.sentry_dsn&&(0,i.configureScope)((e=>{e.addEventProcessor((e=>new Promise((t=>{t({...e,release:`ghost@${this.config.version}`,"user.role":this.user.role.name})}))))})),this.loadServerNotifications(),this.whatsNew.fetchLatest.perform(),this.koenig.fetch()}async handleAuthentication(){return this.handleAuthenticationTask.isRunning?this.handleAuthenticationTask.last:this.handleAuthenticationTask.perform((()=>{this.skipAuthSuccessHandler?this.skipAuthSuccessHandler=!1:super.handleAuthentication("home")}))}async requireAuthentication(e,t){this.isAuthenticated||(e.abort(),this.user&&(await this.setup(),this.notifications.clearAll(),e.retry())),super.requireAuthentication(e,t)}handleInvalidation(){let e=this.appLoadTransition
5843
+ this.user=i}async postAuthPreparation(){await Ember.RSVP.all([this.configManager.fetchAuthenticated(),this.feature.fetch(),this.settings.fetch(),this.membersUtils.fetch()]),this.themeManagement.fetch().catch(console.error),await this.frontend.loginIfNeeded(),this.config.sentry_dsn&&(0,i.configureScope)((e=>{e.addEventProcessor((e=>new Promise((t=>{t({...e,release:`ghost@${this.config.version}`,user:{role:this.user.role.name}})}))))})),this.loadServerNotifications(),this.whatsNew.fetchLatest.perform(),this.koenig.fetch()}async handleAuthentication(){return this.handleAuthenticationTask.isRunning?this.handleAuthenticationTask.last:this.handleAuthenticationTask.perform((()=>{this.skipAuthSuccessHandler?this.skipAuthSuccessHandler=!1:super.handleAuthentication("home")}))}async requireAuthentication(e,t){this.isAuthenticated||(e.abort(),this.user&&(await this.setup(),this.notifications.clearAll(),e.retry())),super.requireAuthentication(e,t)}handleInvalidation(){let e=this.appLoadTransition
5843
5844
  e?e.send("authorizationFailed"):Ember.run.scheduleOnce("routerTransitions",this,"triggerAuthorizationFailed")}triggerAuthorizationFailed(){Ember.getOwner(this).lookup(`route:${this.router.currentRouteName}`)?.send("authorizationFailed")}loadServerNotifications(){this.isAuthenticated&&(this.user.isAuthorOrContributor||this.dataStore.findAll("notification",{reload:!0}).then((e=>{e.forEach((e=>{e.top||e.custom?this.notifications.handleNotification(e):this.upgradeStatus.handleUpgradeNotification(e)}))})))}*handleAuthenticationTask(e){if(!this.user){try{yield this.populateUser()}catch(t){yield this.invalidate()}yield this.postAuthPreparation()}e()}},k=R(w.prototype,"configManager",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=R(w.prototype,"dataStore",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=R(w.prototype,"feature",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=R(w.prototype,"koenig",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=R(w.prototype,"notifications",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=R(w.prototype,"router",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=R(w.prototype,"frontend",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=R(w.prototype,"settings",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=R(w.prototype,"ui",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=R(w.prototype,"upgradeStatus",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=R(w.prototype,"whatsNew",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=R(w.prototype,"membersUtils",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=R(w.prototype,"themeManagement",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=R(w.prototype,"config",[n.inject],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I=R(w.prototype,"user",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),R(w.prototype,"handleAuthenticationTask",[y],Object.getOwnPropertyDescriptor(w.prototype,"handleAuthenticationTask"),w.prototype),w)
5844
5845
  e.default=U})),define("ghost-admin/services/settings",["exports","ghost-admin/models/setting","ghost-admin/mixins/validation-engine"],(function(e,t,i){var n,r,a,s,o,l,u
5845
5846
  function c(e,t,i,n){i&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(n):void 0})}function d(e,t,i){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e
@@ -6081,7 +6082,7 @@ var t=Ember.HTMLBars.template({id:"x5mP0xv7",block:'{"symbols":[],"statements":[
6081
6082
  e.default=t})),define("ghost-admin/templates/settings/labs-loading",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
6082
6083
  var t=Ember.HTMLBars.template({id:"k/w92WvT",block:'{"symbols":[],"statements":[[10,"section"],[14,0,"gh-canvas"],[12],[2,"\\n "],[8,"gh-canvas-header",[[24,0,"gh-canvas-header"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"flex flex-column"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-canvas-breadcrumb"],[12],[2,"\\n "],[8,"link-to",[],[["@route"],["settings"]],[["default"],[{"statements":[[2,"\\n Settings\\n "]],"parameters":[]}]]],[2,"\\n "],[1,[30,[36,0],["arrow-right-small"],null]],[2," Labs\\n "],[13],[2,"\\n "],[10,"h2"],[14,0,"gh-canvas-title"],[14,"data-test-screen-title",""],[12],[2,"\\n Labs\\n "],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[10,"div"],[14,0,"gh-content"],[12],[2,"\\n "],[8,"gh-loading-spinner",[],[[],[]],null],[2,"\\n "],[13],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["svg-jar"]}',moduleName:"ghost-admin/templates/settings/labs-loading.hbs"})
6083
6084
  e.default=t})),define("ghost-admin/templates/settings/labs",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
6084
- var t=Ember.HTMLBars.template({id:"9peCt/go",block:'{"symbols":["uploader","error","uploader","error"],"statements":[[10,"section"],[14,0,"gh-canvas"],[12],[2,"\\n "],[8,"gh-canvas-header",[[24,0,"gh-canvas-header"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"flex flex-column"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-canvas-breadcrumb"],[12],[2,"\\n "],[8,"link-to",[],[["@route"],["settings"]],[["default"],[{"statements":[[2,"\\n Settings\\n "]],"parameters":[]}]]],[2,"\\n "],[1,[30,[36,1],["arrow-right-small"],null]],[2," Labs\\n "],[13],[2,"\\n "],[10,"h2"],[14,0,"gh-canvas-title"],[14,"data-test-screen-title",""],[12],[2,"\\n Labs\\n "],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[10,"section"],[14,0,"view-container settings-debug"],[12],[2,"\\n "],[10,"p"],[14,0,"gh-box gh-box-tip"],[12],[1,[30,[36,1],["idea"],null]],[2,"This is a testing ground for new or experimental features. They may change, break or inexplicably disappear at any time."],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-main-section"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-main-section-header small bn"],[12],[2,"Migration options"],[13],[2,"\\n "],[10,"div"],[15,0,[31,["gh-expandable ",[30,[36,2],[[32,0,["importErrors"]],"overflow-hidden"],null]]]],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Import content"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"Import posts from a JSON or zip file"],[13],[2,"\\n "],[13],[2,"\\n "],[8,"link-to",[[24,0,"gh-btn"],[24,"data-test-link","import-content"]],[["@route"],["settings.labs.import"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"Open Importer"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Export your content"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"Download all of your posts and settings in a single, glorious JSON file"],[13],[2,"\\n "],[13],[2,"\\n "],[11,"button"],[24,0,"gh-btn"],[24,4,"button"],[4,[38,3],[[32,0],"downloadFile","db"],null],[12],[10,"span"],[12],[2,"Export"],[13],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Delete all content"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"Permanently delete all posts and tags from the database, a hard reset"],[13],[2,"\\n "],[13],[2,"\\n "],[11,"button"],[24,0,"gh-btn gh-btn-red"],[24,"data-test-button","delete-all"],[24,4,"button"],[4,[38,4],["click",[32,0,["confirmDeleteAll"]]],null],[12],[10,"span"],[12],[2,"Delete"],[13],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-main-section"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-main-section-header small bn"],[12],[2,"Beta features"],[13],[2,"\\n "],[10,"div"],[14,0,"gh-expandable"],[12],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Substack migrator"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"A "],[10,"a"],[14,6,"https://ghost.org/help/importing-from-substack/"],[14,"target","_blank"],[14,"rel","noopener noreferrer"],[12],[2,"step-by-step tool"],[13],[2," to easily import all your content, members and paid subscriptions"],[13],[2,"\\n "],[13],[2,"\\n "],[8,"link-to",[[24,0,"gh-btn"],[24,"data-test-link","migrate"]],[["@route"],["migrate"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"Open"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Portal translation"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Translate your membership flows into your publication language ("],[10,"a"],[14,6,"https://github.com/TryGhost/Ghost/tree/main/ghost/i18n/locales"],[14,"target","_blank"],[14,"rel","noopener noreferrer"],[12],[2,"supported languages"],[13],[2,"). Don’t see yours? "],[10,"a"],[14,6,"https://forum.ghost.org/t/help-translate-ghost-beta/37461"],[14,"target","_blank"],[14,"rel","noopener noreferrer"],[12],[2,"Get involved"],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["i18n"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[8,"gh-uploader",[],[["@extensions","@uploadUrl","@paramName","@onUploadSuccess","@onUploadFailure"],[[32,0,["redirectsFileExtensions"]],"/redirects/upload/","redirects",[30,[36,5],[[32,0,["redirectUploadResult"]],true],null],[30,[36,5],[[32,0,["redirectUploadResult"]],false],null]]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Redirects"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"Configure redirects for old or moved content, more info in "],[10,"a"],[14,6,"https://ghost.org/tutorials/implementing-redirects/"],[14,"target","_blank"],[14,"rel","noopener noreferrer"],[12],[2,"the docs"],[13],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"gh-setting-action flex flex-column items-end"],[12],[2,"\\n"],[6,[37,2],[[32,3,["isUploading"]]],null,[["default","else"],[{"statements":[[2," "],[1,[32,3,["progressBar"]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"button"],[15,0,[31,["gh-btn gh-btn-icon ",[30,[36,2],[[32,0,["redirectSuccess"]],"gh-btn-green"],null]," ",[30,[36,2],[[32,0,["redirectFailure"]],"gh-btn-red"],null]]]],[15,"onclick",[30,[36,3],[[32,0],"triggerFileDialog"],null]],[14,"data-test-button","upload-redirects"],[14,4,"button"],[12],[2,"\\n "],[10,"span"],[12],[2,"\\n"],[6,[37,2],[[32,0,["redirectSuccess"]]],null,[["default","else"],[{"statements":[[2," "],[1,[30,[36,1],["check-circle"],null]],[2," Uploaded\\n"]],"parameters":[]},{"statements":[[6,[37,2],[[32,0,["redirectFailure"]]],null,[["default","else"],[{"statements":[[2," "],[1,[30,[36,1],["retry"],null]],[2," Upload Failed\\n"]],"parameters":[]},{"statements":[[2," Upload redirects YAML/JSON\\n "]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[12],[11,"a"],[24,6,"#"],[24,"data-test-link","download-redirects"],[4,[38,3],[[32,0],"downloadFile","redirects/download"],null],[12],[2,"Download current redirects"],[13],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,7],[[30,[36,6],[[30,[36,6],[[32,3,["errors"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-setting-error"],[14,"data-test-error","redirects"],[12],[1,[30,[36,0],[[32,4,["context"]],[32,4,["message"]]],null]],[13],[2,"\\n"]],"parameters":[4]}]]],[2,"\\n "],[10,"div"],[14,5,"display:none"],[12],[2,"\\n "],[8,"gh-file-input",[[24,"data-test-file-input","redirects"]],[["@multiple","@action","@accept"],[false,[32,3,["setFiles"]],[32,0,["redirectsFileMimeTypes"]]]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[3]}]]],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[8,"gh-uploader",[],[["@extensions","@uploadUrl","@paramName","@onUploadSuccess","@onUploadFailure"],[[32,0,["yamlExtension"]],"/settings/routes/yaml/","routes",[30,[36,5],[[32,0,["routesUploadResult"]],true],null],[30,[36,5],[[32,0,["routesUploadResult"]],false],null]]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Routes"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"Configure dynamic routing by modifying the routes.yaml file"],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"gh-setting-action flex flex-column items-end"],[12],[2,"\\n"],[6,[37,2],[[32,1,["isUploading"]]],null,[["default","else"],[{"statements":[[2," "],[1,[32,1,["progressBar"]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"button"],[15,0,[31,["gh-btn gh-btn-icon ",[30,[36,2],[[32,0,["routesSuccess"]],"gh-btn-green"],null]," ",[30,[36,2],[[32,0,["routesFailure"]],"gh-btn-red"],null]]]],[15,"onclick",[30,[36,3],[[32,0],"triggerFileDialog"],null]],[14,"data-test-button","upload-routes"],[14,4,"button"],[12],[2,"\\n "],[10,"span"],[12],[2,"\\n"],[6,[37,2],[[32,0,["routesSuccess"]]],null,[["default","else"],[{"statements":[[2," "],[1,[30,[36,1],["check-circle"],null]],[2," Uploaded\\n"]],"parameters":[]},{"statements":[[6,[37,2],[[32,0,["routesFailure"]]],null,[["default","else"],[{"statements":[[2," "],[1,[30,[36,1],["retry"],null]],[2," Upload Failed\\n"]],"parameters":[]},{"statements":[[2," Upload routes YAML\\n "]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[12],[11,"a"],[24,6,"#"],[24,"data-test-link","download-routes"],[4,[38,3],[[32,0],"downloadFile","settings/routes/yaml"],null],[12],[2,"Download current routes.yaml"],[13],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,7],[[30,[36,6],[[30,[36,6],[[32,1,["errors"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-setting-error"],[14,"data-test-error","routes"],[12],[1,[30,[36,0],[[32,2,["context"]],[32,2,["message"]]],null]],[13],[2,"\\n"]],"parameters":[2]}]]],[2,"\\n "],[10,"div"],[14,5,"display:none"],[12],[2,"\\n "],[8,"gh-file-input",[[24,"data-test-file-input","routes"]],[["@multiple","@action","@accept"],[false,[32,1,["setFiles"]],[32,0,["yamlAccept"]]]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[1]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n\\n"],[6,[37,2],[[30,[36,8],null,null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-main-section"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-main-section-header small bn"],[12],[2,"Alpha Features"],[13],[2,"\\n "],[10,"div"],[14,0,"gh-expandable"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"URL cache"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Enable URL Caching\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["urlCache"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Lexical multiplayer"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Enables multiplayer editing in the lexical editor.\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["lexicalMultiplayer"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Webmentions"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Allows viewing received mentions on the dashboard.\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["webmentions"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Websockets"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Test out Websockets functionality at "],[10,"code"],[12],[2,"/ghost/#/websockets"],[13],[2,".\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["websockets"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Stripe Automatic Tax"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Use Stripe Automatic Tax at Stripe Checkout. Needs to be enabled in Stripe\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["stripeAutomaticTax"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Email customization"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Adding more control over the newsletter template\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["emailCustomization"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Collections"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Enables Collections 2.0\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["collections"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Collections Card"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Enables the Collections Card for pages - requires Collections and the beta Editor to be enabled\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["collectionsCard"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Mail Events"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Enables processing of mail events\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["mailEvents"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Lexical indicators"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Show L/M indicator on posts list for easier debugging\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["lexicalIndicators"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Import Member Tier"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Enables tier to be specified when importing members\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["importMemberTier"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Tips & donations"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Enables publishers to collect one-time payments\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["tipsAndDonations"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Recommendations"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Enables publishers to recommend sites to their audience\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["recommendations"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["or","svg-jar","if","action","on","perform","-track-array","each","enable-developer-experiments"]}',moduleName:"ghost-admin/templates/settings/labs.hbs"})
6085
+ var t=Ember.HTMLBars.template({id:"379GCCOc",block:'{"symbols":["uploader","error","uploader","error"],"statements":[[10,"section"],[14,0,"gh-canvas"],[12],[2,"\\n "],[8,"gh-canvas-header",[[24,0,"gh-canvas-header"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"flex flex-column"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-canvas-breadcrumb"],[12],[2,"\\n "],[8,"link-to",[],[["@route"],["settings"]],[["default"],[{"statements":[[2,"\\n Settings\\n "]],"parameters":[]}]]],[2,"\\n "],[1,[30,[36,1],["arrow-right-small"],null]],[2," Labs\\n "],[13],[2,"\\n "],[10,"h2"],[14,0,"gh-canvas-title"],[14,"data-test-screen-title",""],[12],[2,"\\n Labs\\n "],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[10,"section"],[14,0,"view-container settings-debug"],[12],[2,"\\n "],[10,"p"],[14,0,"gh-box gh-box-tip"],[12],[1,[30,[36,1],["idea"],null]],[2,"This is a testing ground for new or experimental features. They may change, break or inexplicably disappear at any time."],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-main-section"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-main-section-header small bn"],[12],[2,"Migration options"],[13],[2,"\\n "],[10,"div"],[15,0,[31,["gh-expandable ",[30,[36,2],[[32,0,["importErrors"]],"overflow-hidden"],null]]]],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Import content"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"Import posts from a JSON or zip file"],[13],[2,"\\n "],[13],[2,"\\n "],[8,"link-to",[[24,0,"gh-btn"],[24,"data-test-link","import-content"]],[["@route"],["settings.labs.import"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"Open Importer"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Export your content"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"Download all of your posts and settings in a single, glorious JSON file"],[13],[2,"\\n "],[13],[2,"\\n "],[11,"button"],[24,0,"gh-btn"],[24,4,"button"],[4,[38,3],[[32,0],"downloadFile","db"],null],[12],[10,"span"],[12],[2,"Export"],[13],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Delete all content"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"Permanently delete all posts and tags from the database, a hard reset"],[13],[2,"\\n "],[13],[2,"\\n "],[11,"button"],[24,0,"gh-btn gh-btn-red"],[24,"data-test-button","delete-all"],[24,4,"button"],[4,[38,4],["click",[32,0,["confirmDeleteAll"]]],null],[12],[10,"span"],[12],[2,"Delete"],[13],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-main-section"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-main-section-header small bn"],[12],[2,"Beta features"],[13],[2,"\\n "],[10,"div"],[14,0,"gh-expandable"],[12],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Substack migrator"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"A "],[10,"a"],[14,6,"https://ghost.org/help/importing-from-substack/"],[14,"target","_blank"],[14,"rel","noopener noreferrer"],[12],[2,"step-by-step tool"],[13],[2," to easily import all your content, members and paid subscriptions"],[13],[2,"\\n "],[13],[2,"\\n "],[8,"link-to",[[24,0,"gh-btn"],[24,"data-test-link","migrate"]],[["@route"],["migrate"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"Open"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Portal translation"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Translate your membership flows into your publication language ("],[10,"a"],[14,6,"https://github.com/TryGhost/Ghost/tree/main/ghost/i18n/locales"],[14,"target","_blank"],[14,"rel","noopener noreferrer"],[12],[2,"supported languages"],[13],[2,"). Don’t see yours? "],[10,"a"],[14,6,"https://forum.ghost.org/t/help-translate-ghost-beta/37461"],[14,"target","_blank"],[14,"rel","noopener noreferrer"],[12],[2,"Get involved"],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["i18n"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[8,"gh-uploader",[],[["@extensions","@uploadUrl","@paramName","@onUploadSuccess","@onUploadFailure"],[[32,0,["redirectsFileExtensions"]],"/redirects/upload/","redirects",[30,[36,5],[[32,0,["redirectUploadResult"]],true],null],[30,[36,5],[[32,0,["redirectUploadResult"]],false],null]]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Redirects"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"Configure redirects for old or moved content, more info in "],[10,"a"],[14,6,"https://ghost.org/tutorials/implementing-redirects/"],[14,"target","_blank"],[14,"rel","noopener noreferrer"],[12],[2,"the docs"],[13],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"gh-setting-action flex flex-column items-end"],[12],[2,"\\n"],[6,[37,2],[[32,3,["isUploading"]]],null,[["default","else"],[{"statements":[[2," "],[1,[32,3,["progressBar"]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"button"],[15,0,[31,["gh-btn gh-btn-icon ",[30,[36,2],[[32,0,["redirectSuccess"]],"gh-btn-green"],null]," ",[30,[36,2],[[32,0,["redirectFailure"]],"gh-btn-red"],null]]]],[15,"onclick",[30,[36,3],[[32,0],"triggerFileDialog"],null]],[14,"data-test-button","upload-redirects"],[14,4,"button"],[12],[2,"\\n "],[10,"span"],[12],[2,"\\n"],[6,[37,2],[[32,0,["redirectSuccess"]]],null,[["default","else"],[{"statements":[[2," "],[1,[30,[36,1],["check-circle"],null]],[2," Uploaded\\n"]],"parameters":[]},{"statements":[[6,[37,2],[[32,0,["redirectFailure"]]],null,[["default","else"],[{"statements":[[2," "],[1,[30,[36,1],["retry"],null]],[2," Upload Failed\\n"]],"parameters":[]},{"statements":[[2," Upload redirects YAML/JSON\\n "]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[12],[11,"a"],[24,6,"#"],[24,"data-test-link","download-redirects"],[4,[38,3],[[32,0],"downloadFile","redirects/download"],null],[12],[2,"Download current redirects"],[13],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,7],[[30,[36,6],[[30,[36,6],[[32,3,["errors"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-setting-error"],[14,"data-test-error","redirects"],[12],[1,[30,[36,0],[[32,4,["context"]],[32,4,["message"]]],null]],[13],[2,"\\n"]],"parameters":[4]}]]],[2,"\\n "],[10,"div"],[14,5,"display:none"],[12],[2,"\\n "],[8,"gh-file-input",[[24,"data-test-file-input","redirects"]],[["@multiple","@action","@accept"],[false,[32,3,["setFiles"]],[32,0,["redirectsFileMimeTypes"]]]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[3]}]]],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[8,"gh-uploader",[],[["@extensions","@uploadUrl","@paramName","@onUploadSuccess","@onUploadFailure"],[[32,0,["yamlExtension"]],"/settings/routes/yaml/","routes",[30,[36,5],[[32,0,["routesUploadResult"]],true],null],[30,[36,5],[[32,0,["routesUploadResult"]],false],null]]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Routes"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"Configure dynamic routing by modifying the routes.yaml file"],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"gh-setting-action flex flex-column items-end"],[12],[2,"\\n"],[6,[37,2],[[32,1,["isUploading"]]],null,[["default","else"],[{"statements":[[2," "],[1,[32,1,["progressBar"]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"button"],[15,0,[31,["gh-btn gh-btn-icon ",[30,[36,2],[[32,0,["routesSuccess"]],"gh-btn-green"],null]," ",[30,[36,2],[[32,0,["routesFailure"]],"gh-btn-red"],null]]]],[15,"onclick",[30,[36,3],[[32,0],"triggerFileDialog"],null]],[14,"data-test-button","upload-routes"],[14,4,"button"],[12],[2,"\\n "],[10,"span"],[12],[2,"\\n"],[6,[37,2],[[32,0,["routesSuccess"]]],null,[["default","else"],[{"statements":[[2," "],[1,[30,[36,1],["check-circle"],null]],[2," Uploaded\\n"]],"parameters":[]},{"statements":[[6,[37,2],[[32,0,["routesFailure"]]],null,[["default","else"],[{"statements":[[2," "],[1,[30,[36,1],["retry"],null]],[2," Upload Failed\\n"]],"parameters":[]},{"statements":[[2," Upload routes YAML\\n "]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[12],[11,"a"],[24,6,"#"],[24,"data-test-link","download-routes"],[4,[38,3],[[32,0],"downloadFile","settings/routes/yaml"],null],[12],[2,"Download current routes.yaml"],[13],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,7],[[30,[36,6],[[30,[36,6],[[32,1,["errors"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-setting-error"],[14,"data-test-error","routes"],[12],[1,[30,[36,0],[[32,2,["context"]],[32,2,["message"]]],null]],[13],[2,"\\n"]],"parameters":[2]}]]],[2,"\\n "],[10,"div"],[14,5,"display:none"],[12],[2,"\\n "],[8,"gh-file-input",[[24,"data-test-file-input","routes"]],[["@multiple","@action","@accept"],[false,[32,1,["setFiles"]],[32,0,["yamlAccept"]]]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[1]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n\\n"],[6,[37,2],[[30,[36,8],null,null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-main-section"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-main-section-header small bn"],[12],[2,"Alpha Features"],[13],[2,"\\n "],[10,"div"],[14,0,"gh-expandable"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"URL cache"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Enable URL Caching\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["urlCache"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Lexical multiplayer"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Enables multiplayer editing in the lexical editor.\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["lexicalMultiplayer"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Webmentions"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Allows viewing received mentions on the dashboard.\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["webmentions"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Websockets"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Test out Websockets functionality at "],[10,"code"],[12],[2,"/ghost/#/websockets"],[13],[2,".\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["websockets"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Stripe Automatic Tax"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Use Stripe Automatic Tax at Stripe Checkout. Needs to be enabled in Stripe\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["stripeAutomaticTax"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Email customization"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Adding more control over the newsletter template\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["emailCustomization"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Collections"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Enables Collections 2.0\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["collections"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Collections Card"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Enables the Collections Card for pages - requires Collections and the beta Editor to be enabled\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["collectionsCard"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Mail Events"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Enables processing of mail events\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["mailEvents"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Lexical indicators"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Show L/M indicator on posts list for easier debugging\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["lexicalIndicators"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Import Member Tier"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Enables tier to be specified when importing members\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["importMemberTier"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"gh-expandable-block"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-expandable-header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"h4"],[14,0,"gh-expandable-title"],[12],[2,"Tips & donations"],[13],[2,"\\n "],[10,"p"],[14,0,"gh-expandable-description"],[12],[2,"\\n Enables publishers to collect one-time payments\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"for-switch"],[12],[2,"\\n "],[8,"gh-feature-flag",[],[["@flag"],["tipsAndDonations"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["or","svg-jar","if","action","on","perform","-track-array","each","enable-developer-experiments"]}',moduleName:"ghost-admin/templates/settings/labs.hbs"})
6085
6086
  e.default=t})),define("ghost-admin/templates/settings/labs/import",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
6086
6087
  var t=Ember.HTMLBars.template({id:"EMFXufEV",block:'{"symbols":[],"statements":[[8,"gh-fullscreen-modal",[],[["@modal","@confirm","@close","@modifier"],["import-content",[32,0,["close"]],[32,0,["close"]],"action import-content"]],null],[2,"\\n"]],"hasEval":false,"upvars":[]}',moduleName:"ghost-admin/templates/settings/labs/import.hbs"})
6087
6088
  e.default=t})),define("ghost-admin/templates/settings/membership",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
@@ -6351,6 +6352,6 @@ e.default=n})),define("ghost-admin/views/application",["exports"],(function(e){O
6351
6352
  var t=Ember.Component.extend({})
6352
6353
  e.default=t}))
6353
6354
  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))}
6354
- return Object.defineProperty(i,"__esModule",{value:!0}),i}catch(n){throw new Error('Could not read config from meta tag with name "'+e+'".')}})),runningTests||require("ghost-admin/app").default.create({version:"5.70",name:"ghost-admin"})
6355
+ return Object.defineProperty(i,"__esModule",{value:!0}),i}catch(n){throw new Error('Could not read config from meta tag with name "'+e+'".')}})),runningTests||require("ghost-admin/app").default.create({version:"5.71",name:"ghost-admin"})
6355
6356
 
6356
- //# sourceMappingURL=ghost-71766888f233d8996c2171e03257c940.map
6357
+ //# sourceMappingURL=ghost-a43c6dbe8d871a5929a0c4ccb54d391e.map