ghost 5.29.0 → 5.30.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 (126) hide show
  1. package/components/tryghost-adapter-manager-5.30.0.tgz +0 -0
  2. package/components/{tryghost-api-framework-5.29.0.tgz → tryghost-api-framework-5.30.0.tgz} +0 -0
  3. package/components/tryghost-api-version-compatibility-service-5.30.0.tgz +0 -0
  4. package/components/tryghost-audience-feedback-5.30.0.tgz +0 -0
  5. package/components/tryghost-bootstrap-socket-5.30.0.tgz +0 -0
  6. package/components/tryghost-constants-5.30.0.tgz +0 -0
  7. package/components/tryghost-custom-theme-settings-service-5.30.0.tgz +0 -0
  8. package/components/{tryghost-data-generator-5.29.0.tgz → tryghost-data-generator-5.30.0.tgz} +0 -0
  9. package/components/tryghost-domain-events-5.30.0.tgz +0 -0
  10. package/components/tryghost-email-analytics-provider-mailgun-5.30.0.tgz +0 -0
  11. package/components/tryghost-email-analytics-service-5.30.0.tgz +0 -0
  12. package/components/tryghost-email-content-generator-5.30.0.tgz +0 -0
  13. package/components/tryghost-email-events-5.30.0.tgz +0 -0
  14. package/components/tryghost-email-service-5.30.0.tgz +0 -0
  15. package/components/tryghost-email-suppression-list-5.30.0.tgz +0 -0
  16. package/components/tryghost-express-dynamic-redirects-5.30.0.tgz +0 -0
  17. package/components/tryghost-extract-api-key-5.30.0.tgz +0 -0
  18. package/components/tryghost-html-to-plaintext-5.30.0.tgz +0 -0
  19. package/components/tryghost-importer-revue-5.30.0.tgz +0 -0
  20. package/components/tryghost-job-manager-5.30.0.tgz +0 -0
  21. package/components/tryghost-link-redirects-5.30.0.tgz +0 -0
  22. package/components/tryghost-link-replacer-5.30.0.tgz +0 -0
  23. package/components/tryghost-link-tracking-5.30.0.tgz +0 -0
  24. package/components/tryghost-magic-link-5.30.0.tgz +0 -0
  25. package/components/tryghost-mailgun-client-5.30.0.tgz +0 -0
  26. package/components/tryghost-member-attribution-5.30.0.tgz +0 -0
  27. package/components/tryghost-member-events-5.30.0.tgz +0 -0
  28. package/components/tryghost-members-api-5.30.0.tgz +0 -0
  29. package/components/tryghost-members-csv-5.30.0.tgz +0 -0
  30. package/components/{tryghost-members-events-service-5.29.0.tgz → tryghost-members-events-service-5.30.0.tgz} +0 -0
  31. package/components/tryghost-members-importer-5.30.0.tgz +0 -0
  32. package/components/tryghost-members-offers-5.30.0.tgz +0 -0
  33. package/components/tryghost-members-payments-5.30.0.tgz +0 -0
  34. package/components/tryghost-members-ssr-5.30.0.tgz +0 -0
  35. package/components/tryghost-members-stripe-service-5.30.0.tgz +0 -0
  36. package/components/tryghost-minifier-5.30.0.tgz +0 -0
  37. package/components/tryghost-mw-api-version-mismatch-5.30.0.tgz +0 -0
  38. package/components/tryghost-mw-cache-control-5.30.0.tgz +0 -0
  39. package/components/tryghost-mw-error-handler-5.30.0.tgz +0 -0
  40. package/components/tryghost-mw-session-from-token-5.30.0.tgz +0 -0
  41. package/components/tryghost-mw-update-user-last-seen-5.30.0.tgz +0 -0
  42. package/components/tryghost-mw-vhost-5.30.0.tgz +0 -0
  43. package/components/tryghost-oembed-service-5.30.0.tgz +0 -0
  44. package/components/tryghost-package-json-5.30.0.tgz +0 -0
  45. package/components/tryghost-referrers-5.30.0.tgz +0 -0
  46. package/components/{tryghost-security-5.29.0.tgz → tryghost-security-5.30.0.tgz} +0 -0
  47. package/components/tryghost-session-service-5.30.0.tgz +0 -0
  48. package/components/tryghost-settings-path-manager-5.30.0.tgz +0 -0
  49. package/components/{tryghost-staff-service-5.29.0.tgz → tryghost-staff-service-5.30.0.tgz} +0 -0
  50. package/components/tryghost-stats-service-5.30.0.tgz +0 -0
  51. package/components/{tryghost-tiers-5.29.0.tgz → tryghost-tiers-5.30.0.tgz} +0 -0
  52. package/components/tryghost-update-check-service-5.30.0.tgz +0 -0
  53. package/components/tryghost-verification-trigger-5.30.0.tgz +0 -0
  54. package/components/tryghost-version-notifications-data-service-5.30.0.tgz +0 -0
  55. package/core/built/admin/assets/{chunk.143.b610199533b562d3f4bb.js → chunk.143.f9aa3f7f1c45d1d921cd.js} +19 -20
  56. package/core/built/admin/assets/chunk.178.55d68318431345983298.js +11 -0
  57. package/core/built/admin/assets/{chunk.45.87cd3fcd0323d4103a17.js → chunk.47.f29250a4560868c21293.js} +129 -127
  58. package/core/built/admin/assets/{chunk.45.87cd3fcd0323d4103a17.js.LICENSE.txt → chunk.47.f29250a4560868c21293.js.LICENSE.txt} +0 -0
  59. package/core/built/admin/assets/{chunk.507.18a4d11e74a0b6e03a69.js → chunk.507.aa38cb08f25bae1d4e76.js} +1 -1
  60. package/core/built/admin/assets/{ghost-4005771a511aaabd6545fb9645cfa24a.js → ghost-23dc524374e35a582886c36f7dacdb05.js} +4379 -4364
  61. package/core/built/admin/assets/ghost-d3e45940f0f1601232d464d0b429d45f.css +1 -0
  62. package/core/built/admin/assets/ghost-dark-c8dc36895dfcbc03f0edd94311c65bfd.css +1 -0
  63. package/core/built/admin/assets/{vendor-88c5114bd6fdce352a32a0ac1fd4f32b.js → vendor-fadbf85ad92c591dc4bd3755312b6ddf.js} +4 -4
  64. package/core/built/admin/index.html +6 -6
  65. package/core/server/api/endpoints/email-previews.js +2 -2
  66. package/core/server/data/migrations/versions/5.30/2023-01-13-04-25-unsubscribe-suppressed-emails.js +21 -0
  67. package/core/server/models/member.js +10 -1
  68. package/core/server/services/mega/feedback-buttons.js +9 -103
  69. package/core/server/services/mega/mega.js +9 -3
  70. package/core/server/services/mega/template.js +1 -3
  71. package/core/shared/config/defaults.json +1 -1
  72. package/core/shared/labs.js +4 -4
  73. package/loggingrc.js +3 -0
  74. package/package.json +113 -113
  75. package/yarn.lock +304 -514
  76. package/components/tryghost-adapter-manager-5.29.0.tgz +0 -0
  77. package/components/tryghost-api-version-compatibility-service-5.29.0.tgz +0 -0
  78. package/components/tryghost-audience-feedback-5.29.0.tgz +0 -0
  79. package/components/tryghost-bootstrap-socket-5.29.0.tgz +0 -0
  80. package/components/tryghost-constants-5.29.0.tgz +0 -0
  81. package/components/tryghost-custom-theme-settings-service-5.29.0.tgz +0 -0
  82. package/components/tryghost-domain-events-5.29.0.tgz +0 -0
  83. package/components/tryghost-email-analytics-provider-mailgun-5.29.0.tgz +0 -0
  84. package/components/tryghost-email-analytics-service-5.29.0.tgz +0 -0
  85. package/components/tryghost-email-content-generator-5.29.0.tgz +0 -0
  86. package/components/tryghost-email-events-5.29.0.tgz +0 -0
  87. package/components/tryghost-email-service-5.29.0.tgz +0 -0
  88. package/components/tryghost-email-suppression-list-5.29.0.tgz +0 -0
  89. package/components/tryghost-express-dynamic-redirects-5.29.0.tgz +0 -0
  90. package/components/tryghost-extract-api-key-5.29.0.tgz +0 -0
  91. package/components/tryghost-html-to-plaintext-5.29.0.tgz +0 -0
  92. package/components/tryghost-importer-revue-5.29.0.tgz +0 -0
  93. package/components/tryghost-job-manager-5.29.0.tgz +0 -0
  94. package/components/tryghost-link-redirects-5.29.0.tgz +0 -0
  95. package/components/tryghost-link-replacer-5.29.0.tgz +0 -0
  96. package/components/tryghost-link-tracking-5.29.0.tgz +0 -0
  97. package/components/tryghost-magic-link-5.29.0.tgz +0 -0
  98. package/components/tryghost-mailgun-client-5.29.0.tgz +0 -0
  99. package/components/tryghost-member-attribution-5.29.0.tgz +0 -0
  100. package/components/tryghost-member-events-5.29.0.tgz +0 -0
  101. package/components/tryghost-members-api-5.29.0.tgz +0 -0
  102. package/components/tryghost-members-csv-5.29.0.tgz +0 -0
  103. package/components/tryghost-members-importer-5.29.0.tgz +0 -0
  104. package/components/tryghost-members-offers-5.29.0.tgz +0 -0
  105. package/components/tryghost-members-payments-5.29.0.tgz +0 -0
  106. package/components/tryghost-members-ssr-5.29.0.tgz +0 -0
  107. package/components/tryghost-members-stripe-service-5.29.0.tgz +0 -0
  108. package/components/tryghost-minifier-5.29.0.tgz +0 -0
  109. package/components/tryghost-mw-api-version-mismatch-5.29.0.tgz +0 -0
  110. package/components/tryghost-mw-cache-control-5.29.0.tgz +0 -0
  111. package/components/tryghost-mw-error-handler-5.29.0.tgz +0 -0
  112. package/components/tryghost-mw-session-from-token-5.29.0.tgz +0 -0
  113. package/components/tryghost-mw-update-user-last-seen-5.29.0.tgz +0 -0
  114. package/components/tryghost-mw-vhost-5.29.0.tgz +0 -0
  115. package/components/tryghost-oembed-service-5.29.0.tgz +0 -0
  116. package/components/tryghost-package-json-5.29.0.tgz +0 -0
  117. package/components/tryghost-referrers-5.29.0.tgz +0 -0
  118. package/components/tryghost-session-service-5.29.0.tgz +0 -0
  119. package/components/tryghost-settings-path-manager-5.29.0.tgz +0 -0
  120. package/components/tryghost-stats-service-5.29.0.tgz +0 -0
  121. package/components/tryghost-update-check-service-5.29.0.tgz +0 -0
  122. package/components/tryghost-verification-trigger-5.29.0.tgz +0 -0
  123. package/components/tryghost-version-notifications-data-service-5.29.0.tgz +0 -0
  124. package/core/built/admin/assets/ghost-1532517fd24b662b42a85ea0881865a5.css +0 -1
  125. package/core/built/admin/assets/ghost-dark-3b8aff3cf9db67f6ad59abec25ae98be.css +0 -1
  126. package/core/frontend/helpers/lang.js +0 -20
@@ -11470,7 +11470,7 @@ e.default={content:'<path d="M23.854 15.646L19.5 11.293V7.45c1.14-.233 2-1.242 2
11470
11470
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
11471
11471
  e.default={content:'<path d="M23.245 23.996a.743.743 0 01-.53-.22L16.2 17.26a9.824 9.824 0 01-2.553 1.579 9.766 9.766 0 01-7.51.069 9.745 9.745 0 01-5.359-5.262c-1.025-2.412-1.05-5.08-.069-7.51S3.558 1.802 5.97.777a9.744 9.744 0 017.51-.069 9.745 9.745 0 015.359 5.262 9.748 9.748 0 01.069 7.51 9.807 9.807 0 01-1.649 2.718l6.517 6.518a.75.75 0 01-.531 1.28zM9.807 1.49a8.259 8.259 0 00-3.25.667 8.26 8.26 0 00-4.458 4.54 8.26 8.26 0 00.058 6.362 8.26 8.26 0 004.54 4.458 8.259 8.259 0 006.362-.059 8.285 8.285 0 002.594-1.736.365.365 0 01.077-.076 8.245 8.245 0 001.786-2.728 8.255 8.255 0 00-.059-6.362 8.257 8.257 0 00-4.54-4.458 8.28 8.28 0 00-3.11-.608z"/>',attrs:{viewBox:"0 0 24 24"}}})),define("ember-svg-jar/inlined/send-email",["exports"],(function(e){"use strict"
11472
11472
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
11473
- e.default={content:'<path d="M21.954 2.045L9.41 14.591M21.04 1.686a1 1 0 011.274 1.274l-6.676 19.074a1 1 0 01-1.792.2L9.2 14.8l-7.434-4.646a1 1 0 01.2-1.792L21.04 1.686z" stroke="#000" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>',attrs:{fill:"none",viewBox:"0 0 24 24"}}})),define("ember-svg-jar/inlined/settings",["exports"],(function(e){"use strict"
11473
+ e.default={content:'<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M2.05 10.387a1.487 1.487 0 01-.069-2.84L22.052 1a.751.751 0 01.948.943l-6.541 20.081a1.486 1.486 0 01-2.841-.07l-2.246-9.33-9.322-2.237z"/>',attrs:{fill:"none",viewBox:"0 0 24 24"}}})),define("ember-svg-jar/inlined/settings",["exports"],(function(e){"use strict"
11474
11474
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
11475
11475
  e.default={content:'<defs><style>.settings_svg__a{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5px}</style></defs><path class="settings_svg__a" d="M10.546 2.438a1.957 1.957 0 002.908 0L14.4 1.4a1.959 1.959 0 013.41 1.413l-.071 1.4a1.958 1.958 0 002.051 2.054l1.4-.071a1.959 1.959 0 011.41 3.41l-1.042.94a1.96 1.96 0 000 2.909l1.042.94a1.959 1.959 0 01-1.413 3.41l-1.4-.071a1.958 1.958 0 00-2.056 2.056l.071 1.4A1.959 1.959 0 0114.4 22.6l-.941-1.041a1.959 1.959 0 00-2.908 0L9.606 22.6A1.959 1.959 0 016.2 21.192l.072-1.4a1.958 1.958 0 00-2.056-2.056l-1.4.071A1.958 1.958 0 011.4 14.4l1.041-.94a1.96 1.96 0 000-2.909L1.4 9.606A1.958 1.958 0 012.809 6.2l1.4.071a1.958 1.958 0 002.058-2.06L6.2 2.81A1.959 1.959 0 019.606 1.4z"/><circle class="settings_svg__a" cx="12" cy="12.001" r="4.5"/>',attrs:{viewBox:"0 0 24 24"}}})),define("ember-svg-jar/inlined/shield-lock",["exports"],(function(e){"use strict"
11476
11476
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
@@ -11535,7 +11535,7 @@ e.default={content:'<path d="M15.189 2.021a9.728 9.728 0 00-7.924 4.85.249.249 0
11535
11535
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
11536
11536
  e.default={content:'<path d="M17.4 29c-.8.8-2 .8-2.8 0L2.3 16.2C-.8 13.1-.8 8 2.3 4.8c3.1-3.1 8.2-3.1 11.3 0L16 7.6l2.3-2.8c3.1-3.1 8.2-3.1 11.3 0 3.1 3.1 3.1 8.2 0 11.4L17.4 29z"/>',attrs:{viewBox:"0 0 32 32"}}})),define("ember-svg-jar/inlined/unsplash",["exports"],(function(e){"use strict"
11537
11537
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
11538
- e.default={content:'<path d="M83.86 54.15v34.13H38.57V54.15H0v68.26h122.43V54.15H83.86zM38.57 0h45.3v34.13h-45.3z"/>',attrs:{viewBox:"0 0 122.43 122.41"}}})),define("ember-svg-jar/inlined/upload-fill",["exports"],(function(e){"use strict"
11538
+ e.default={content:'<path d="M83.86 54.15v34.13H38.57V54.15H0v68.26h122.43V54.15H83.86zM38.57 0h45.3v34.13h-45.3z"/>',attrs:{viewBox:"0 0 122.43 122.41",fill:"currentColor"}}})),define("ember-svg-jar/inlined/upload-fill",["exports"],(function(e){"use strict"
11539
11539
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
11540
11540
  e.default={content:'<path d="M12.001 16.5a.75.75 0 01-.75-.75V5.561l-3.22 3.22a.746.746 0 01-1.06-.001c-.142-.141-.22-.33-.22-.53s.078-.389.22-.53l4.499-4.5a.74.74 0 01.245-.163l.025-.009a.743.743 0 01.522 0l.02.007c.097.04.179.095.25.166l4.499 4.499c.142.141.22.33.22.53s-.078.389-.22.53a.749.749 0 01-1.06 0l-3.22-3.22v10.19a.75.75 0 01-.75.75z"/><path d="M3.751 21a3.754 3.754 0 01-3.75-3.75v-1.5a.75.75 0 011.5 0v1.5a2.252 2.252 0 002.25 2.25h16.5a2.252 2.252 0 002.25-2.25v-1.5a.75.75 0 011.5 0v1.5a3.754 3.754 0 01-3.75 3.75h-16.5z"/>',attrs:{viewBox:"0 0 24 24"}}})),define("ember-svg-jar/inlined/upload",["exports"],(function(e){"use strict"
11541
11541
  Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
@@ -12314,7 +12314,7 @@ if("object"!=typeof n)return n
12314
12314
  throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string")
12315
12315
  return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function I(e,t,r,n,i){var o={}
12316
12316
  return Object.keys(n).forEach((function(e){o[e]=n[e]})),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=r.slice().reverse().reduce((function(r,n){return n(e,t,r)||r}),o),i&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(i):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(e,t,o),o=null),o}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.VIDEO_MIME_TYPES=e.VIDEO_EXTENSIONS=void 0
12317
- const N=Ember.HTMLBars.template({id:"BGLwUjys",block:'{"symbols":["uploader","error","card","uploader","@payload","@env","@headerOffset","@isSelected","@isEditing","@selectCard","@deselectCard","@editCard","@saveCard","@saveAsSnippet","@addParagraphAfterCard","@moveCursorToPrevSection","@moveCursorToNextSection","@editor"],"statements":[[8,"koenig-card",[[4,[38,13],[[32,0,["didInsert"]]],null],[4,[38,2],["dragover",[32,0,["dragOver"]]],null],[4,[38,2],["dragleave",[32,0,["dragLeave"]]],null],[4,[38,2],["drop",[32,0,["drop"]]],null]],[["@env","@class","@headerOffset","@toolbar","@payload","@isSelected","@isEditing","@selectCard","@deselectCard","@editCard","@hasEditMode","@saveCard","@saveAsSnippet","@addParagraphAfterCard","@moveCursorToPrevSection","@moveCursorToNextSection","@editor"],[[32,6],[30,[36,12],["kg-card kg-video-card kg-card-hover mih10 miw-100 relative ba b--transparent",[30,[36,11],["breakout"],[["size"],[[32,5,["cardWidth"]]]]]],null],[32,7],[32,0,["toolbar"]],[32,5],[32,8],[32,9],[32,10],[32,11],[32,12],[30,[36,8],[[32,0,["isEmpty"]]],null],[32,13],[32,14],[32,15],[32,16],[32,17],[32,18]]],[["default"],[{"statements":[[2,"\\n "],[8,"gh-uploader",[],[["@uploadUrl","@resourceName","@files","@accept","@extensions","@onStart","@onComplete","@onFailed"],["/media/upload/","media",[32,0,["files"]],[32,0,["videoMimeTypes"]],[32,0,["videoExtensions"]],[32,0,["videoUploadStarted"]],[32,0,["videoUploadCompleted"]],[32,0,["videoUploadFailed"]]]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[15,0,[31,["relative",[30,[36,5],[[30,[36,10],[[32,0,["previewThumbnailSrc"]],[32,5,["customThumbnailSrc"]],[32,5,["thumbnailSrc"]]],null]," bg-whitegrey-l2"],null]]]],[12],[2,"\\n"],[6,[37,4],[[30,[36,10],[[32,0,["previewThumbnailSrc"]],[32,5,["customThumbnailSrc"]],[32,5,["thumbnailSrc"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"aspect-ratio"],[15,5,[32,0,["aspectRatioPaddingStyle"]]],[12],[2,"\\n "],[10,"img"],[15,"src",[30,[36,10],[[32,0,["previewThumbnailSrc"]],[32,5,["customThumbnailSrc"]],[32,5,["thumbnailSrc"]]],null]],[14,0,"aspect-ratio--object"],[14,5,"object-fit: cover"],[12],[13],[2,"\\n "],[13],[2,"\\n"],[6,[37,5],[[30,[36,10],[[32,4,["isUploading"]],[32,4,["errors"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"image-overlay"],[12],[2,"\\n "],[10,"button"],[14,0,"kg-large-play-icon"],[14,4,"button"],[12],[1,[30,[36,3],["play"],null]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,4],[[32,0,["isDraggedOver"]]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"absolute absolute--fill flex items-center bg-black-60 pe-none"],[12],[2,"\\n "],[10,"span"],[14,0,"db center sans-serif fw7 f7 white"],[12],[2,"\\n Drop to replace video\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2,"\\n"],[6,[37,4],[[30,[36,10],[[32,4,["errors"]],[32,4,["isUploading"]],[30,[36,8],[[32,5,["src"]]],null]],null]],null,[["default","else"],[{"statements":[[2," "],[10,"div"],[15,0,[31,["relative miw-100 flex items-center justify-center ",[30,[36,5],[[32,5,["src"]],"kg-media-placeholder ba b--whitegrey bg-whitegrey-l2","absolute absolute--fill bg-white-50"],null]]]],[12],[2,"\\n"],[6,[37,4],[[32,4,["errors"]]],null,[["default"],[{"statements":[[2," "],[10,"span"],[14,0,"kg-upload-error"],[12],[2,"\\n "],[1,[30,[36,9],[[32,4,["errors"]],"0.message"],null]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,4],[[32,0,["isDraggedOver"]]],null,[["default","else"],[{"statements":[[2," "],[10,"span"],[14,0,"db center sans-serif fw7 f7 middarkgrey"],[12],[2,"\\n Drop it like it\'s hot 🔥\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,4],[[32,4,["isUploading"]]],null,[["default","else"],[{"statements":[[2," "],[1,[32,4,["progressBar"]]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,4],[[30,[36,8],[[32,0,["previewThumbnailSrc"]],[32,5,["src"]]],null]],null,[["default"],[{"statements":[[2," "],[11,"button"],[24,0,"flex flex-column items-center center sans-serif fw4 f7 middarkgrey pa16 pt14 pb14 kg-image-button"],[24,4,"button"],[4,[38,2],["click",[32,0,["triggerVideoFileDialog"]]],null],[12],[2,"\\n "],[1,[30,[36,3],["film-camera"],[["class"],["kg-placeholder-video"]]]],[2,"\\n "],[10,"span"],[14,0,"mt4 kg-upload-placeholder-text"],[12],[2,"Click to select a video"],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"div"],[14,0,"kg-player-container"],[12],[2,"\\n "],[10,"div"],[15,0,[31,["kg-player ",[30,[36,4],[[30,[36,7],[[32,5,["cardWidth"]],"full"],null],"kg-player-full"],null]]]],[12],[2,"\\n "],[10,"button"],[14,0,"kg-player-play-icon"],[14,4,"button"],[12],[1,[30,[36,3],["play"],null]],[13],[2,"\\n "],[10,"span"],[14,0,"kg-player-current-time"],[12],[2,"0:00"],[13],[2,"\\n "],[10,"div"],[14,0,"kg-player-time"],[12],[2,"\\n /"],[10,"span"],[14,0,"kg-player-duration"],[12],[1,[32,0,["totalDuration"]]],[13],[2,"\\n "],[13],[2,"\\n "],[10,"input"],[14,0,"kg-player-seek-slider"],[14,"max","100"],[14,2,"0"],[14,4,"range"],[12],[13],[2,"\\n "],[10,"button"],[14,0,"kg-player-playback-rate"],[14,4,"button"],[12],[2,"1×"],[13],[2,"\\n "],[10,"button"],[14,0,"kg-player-unmute-icon"],[14,4,"button"],[12],[1,[30,[36,3],["unmute"],null]],[13],[2,"\\n "],[10,"input"],[14,0,"kg-player-volume-slider"],[14,"max","100"],[14,2,"70"],[14,4,"range"],[12],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n\\n "],[10,"div"],[14,5,"display:none"],[12],[2,"\\n "],[8,"gh-file-input",[],[["@multiple","@action","@accept","@onInsert"],[false,[32,4,["setFiles"]],[32,0,["videoMimeTypes"]],[32,0,["registerVideoFileInput"]]]],null],[2,"\\n "],[13],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n\\n"],[6,[37,4],[[30,[36,10],[[32,8],[30,[36,14],[[32,5,["caption"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,3,["CaptionInput"]],[],[["@caption","@update","@placeholder"],[[32,5,["caption"]],[30,[36,6],[[32,0,["updatePayloadAttr"]],"caption"],null],"Type caption for video (optional)"]],null],[2,"\\n"]],"parameters":[]}]]]],"parameters":[3]}]]],[2,"\\n\\n"],[6,[37,4],[[30,[36,15],[[32,9],[32,5,["src"]]],null]],null,[["default"],[{"statements":[[2," "],[8,"koenig-settings-panel",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"kg-settings-panel-control kg-settings-panel-control-horizontal"],[12],[2,"\\n "],[10,"div"],[14,0,"kg-settings-panel-control-label"],[12],[2,"Video width"],[13],[2,"\\n "],[10,"div"],[14,0,"kg-settings-panel-control-input"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-btn-group icons"],[12],[2,"\\n "],[11,"button"],[24,"title","Regular"],[16,0,[31,["gh-btn gh-btn-icon ",[30,[36,5],[[32,5,["cardWidth"]],"gh-btn-group-selected"],null]]]],[24,4,"button"],[4,[38,2],["click",[30,[36,6],[[32,0,["updatePayloadAttr"]],"cardWidth",null],null]],null],[12],[10,"span"],[12],[1,[30,[36,3],["koenig/kg-img-regular"],[["class"],["fill-darkgrey"]]]],[13],[13],[2,"\\n "],[11,"button"],[24,"title","Wide"],[16,0,[31,["gh-btn gh-btn-icon ",[30,[36,4],[[30,[36,7],[[32,5,["cardWidth"]],"wide"],null],"gh-btn-group-selected"],null]]]],[24,4,"button"],[4,[38,2],["click",[30,[36,6],[[32,0,["updatePayloadAttr"]],"cardWidth","wide"],null]],null],[12],[10,"span"],[12],[1,[30,[36,3],["koenig/kg-img-wide"],[["class"],["fill-darkgrey"]]]],[13],[13],[2,"\\n "],[11,"button"],[24,"title","Full"],[16,0,[31,["gh-btn gh-btn-icon ",[30,[36,4],[[30,[36,7],[[32,5,["cardWidth"]],"full"],null],"gh-btn-group-selected"],null]]]],[24,4,"button"],[4,[38,2],["click",[30,[36,6],[[32,0,["updatePayloadAttr"]],"cardWidth","full"],null]],null],[12],[10,"span"],[12],[1,[30,[36,3],["koenig/kg-img-full"],[["class"],["fill-darkgrey"]]]],[13],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"kg-settings-panel-control kg-settings-panel-control-horizontal"],[12],[2,"\\n "],[10,"label"],[14,0,"kg-settings-panel-control-label"],[14,"for","loop-toggle"],[12],[2,"Loop"],[13],[2,"\\n "],[10,"div"],[14,0,"kg-settings-panel-control-input"],[12],[2,"\\n "],[10,"div"],[14,0,"for-switch x-small"],[12],[2,"\\n "],[10,"label"],[14,0,"switch"],[12],[2,"\\n "],[11,"input"],[24,0,"gh-input"],[24,1,"loop-toggle"],[16,"checked",[32,5,["loop"]]],[24,4,"checkbox"],[4,[38,2],["input",[32,0,["toggleLoop"]]],null],[12],[13],[2,"\\n "],[10,"span"],[14,0,"input-toggle-component mt1"],[12],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"kg-settings-panel-control-info video"],[12],[2,"Autoplay your video on a loop without sound."],[13],[2,"\\n\\n "],[8,"gh-uploader",[],[["@uploadUrl","@accept","@extensions","@onStart","@onComplete"],["/images/upload/",[32,0,["imageMimeTypes"]],[32,0,["imageExtensions"]],[32,0,["customThumbnailUploadStarted"]],[32,0,["customThumbnailUploadCompleted"]]]],[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,5],[[32,5,["loop"]]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"kg-settings-panel-control"],[12],[2,"\\n "],[10,"label"],[14,0,"kg-settings-panel-control-label"],[12],[2,"Custom thumbnail"],[13],[2,"\\n "],[10,"div"],[14,0,"kg-settings-panel-control-input"],[12],[2,"\\n "],[10,"div"],[14,0,"relative w-100"],[12],[2,"\\n"],[6,[37,4],[[32,1,["isUploading"]]],null,[["default","else"],[{"statements":[[2," "],[10,"div"],[14,0,"kg-upload-thumbnail-xl"],[12],[2,"\\n "],[1,[32,1,["progressBar"]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,4],[[32,5,["customThumbnailSrc"]]],null,[["default","else"],[{"statements":[[2," "],[10,"div"],[14,0,"kg-thumbnail-xl-container"],[12],[2,"\\n "],[11,"img"],[24,0,"kg-thumbnail-xl"],[16,"src",[32,5,["customThumbnailSrc"]]],[4,[38,2],["click",[32,1,["triggerFileDialog"]]],null],[12],[13],[2,"\\n "],[10,"div"],[14,0,"image-overlay"],[12],[2,"\\n "],[10,"div"],[14,0,"flex flex-row-reverse"],[12],[2,"\\n "],[11,"button"],[24,0,"bg-white-90 br3 pe-auto"],[24,4,"button"],[4,[38,2],["click",[32,0,["deleteCustomThumbnail"]]],null],[12],[2,"\\n "],[1,[30,[36,3],["koenig/kg-trash"],[["class"],["kg-replace-icon fill-darkgrey"]]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[11,"button"],[24,0,"gh-btn kg-upload-thumbnail-xl"],[24,4,"button"],[4,[38,2],["click",[32,1,["triggerFileDialog"]]],null],[12],[2,"\\n "],[1,[30,[36,3],["upload-fill"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[10,"div"],[14,5,"display:none"],[12],[2,"\\n "],[8,"gh-file-input",[],[["@multiple","@action","@accept","@onInsert"],[false,[32,1,["setFiles"]],[32,0,["imageMimeTypes"]],[32,1,["registerFileInput"]]]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"],[6,[37,4],[[32,1,["errors"]]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"kg-settings-panel-control-info"],[12],[2,"\\n"],[6,[37,1],[[30,[36,0],[[30,[36,0],[[32,1,["errors"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"span"],[14,0,"red"],[12],[1,[32,2,["message"]]],[13],[2,"\\n"]],"parameters":[2]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[1]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["-track-array","each","on","svg-jar","if","unless","fn","eq","not","get","or","kg-style","concat","did-insert","clean-basic-html","and"]}',moduleName:"koenig-editor/components/koenig-card-video.hbs"}),L=["mp4","webm","ogv"]
12317
+ const N=Ember.HTMLBars.template({id:"cWi7xXMQ",block:'{"symbols":["uploader","card","uploader","@payload","@env","@headerOffset","@isSelected","@isEditing","@selectCard","@deselectCard","@editCard","@saveCard","@saveAsSnippet","@addParagraphAfterCard","@moveCursorToPrevSection","@moveCursorToNextSection","@editor"],"statements":[[8,"koenig-card",[[4,[38,11],[[32,0,["didInsert"]]],null],[4,[38,0],["dragover",[32,0,["dragOver"]]],null],[4,[38,0],["dragleave",[32,0,["dragLeave"]]],null],[4,[38,0],["drop",[32,0,["drop"]]],null]],[["@env","@class","@headerOffset","@toolbar","@payload","@isSelected","@isEditing","@selectCard","@deselectCard","@editCard","@hasEditMode","@saveCard","@saveAsSnippet","@addParagraphAfterCard","@moveCursorToPrevSection","@moveCursorToNextSection","@editor"],[[32,5],[30,[36,10],["kg-card kg-video-card kg-card-hover mih10 miw-100 relative ba b--transparent",[30,[36,9],["breakout"],[["size"],[[32,4,["cardWidth"]]]]]],null],[32,6],[32,0,["toolbar"]],[32,4],[32,7],[32,8],[32,9],[32,10],[32,11],[30,[36,7],[[32,0,["isEmpty"]]],null],[32,12],[32,13],[32,14],[32,15],[32,16],[32,17]]],[["default"],[{"statements":[[2,"\\n "],[8,"gh-uploader",[],[["@uploadUrl","@resourceName","@files","@accept","@extensions","@onStart","@onComplete","@onFailed"],["/media/upload/","media",[32,0,["files"]],[32,0,["videoMimeTypes"]],[32,0,["videoExtensions"]],[32,0,["videoUploadStarted"]],[32,0,["videoUploadCompleted"]],[32,0,["videoUploadFailed"]]]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[15,0,[31,["relative",[30,[36,3],[[30,[36,8],[[32,0,["previewThumbnailSrc"]],[32,4,["customThumbnailSrc"]],[32,4,["thumbnailSrc"]]],null]," bg-whitegrey-l2"],null]]]],[12],[2,"\\n"],[6,[37,2],[[30,[36,8],[[32,0,["previewThumbnailSrc"]],[32,4,["customThumbnailSrc"]],[32,4,["thumbnailSrc"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"aspect-ratio"],[15,5,[32,0,["aspectRatioPaddingStyle"]]],[12],[2,"\\n "],[10,"img"],[15,"src",[30,[36,8],[[32,0,["previewThumbnailSrc"]],[32,4,["customThumbnailSrc"]],[32,4,["thumbnailSrc"]]],null]],[14,0,"aspect-ratio--object"],[14,5,"object-fit: cover"],[12],[13],[2,"\\n "],[13],[2,"\\n"],[6,[37,3],[[30,[36,8],[[32,3,["isUploading"]],[32,3,["errors"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"image-overlay"],[12],[2,"\\n "],[10,"button"],[14,0,"kg-large-play-icon"],[14,4,"button"],[12],[1,[30,[36,1],["play"],null]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,2],[[32,0,["isDraggedOver"]]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"absolute absolute--fill flex items-center bg-black-60 pe-none"],[12],[2,"\\n "],[10,"span"],[14,0,"db center sans-serif fw7 f7 white"],[12],[2,"\\n Drop to replace video\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2,"\\n"],[6,[37,2],[[30,[36,8],[[32,3,["errors"]],[32,3,["isUploading"]],[30,[36,7],[[32,4,["src"]]],null]],null]],null,[["default","else"],[{"statements":[[2," "],[10,"div"],[15,0,[31,["relative miw-100 flex items-center justify-center ",[30,[36,3],[[32,4,["src"]],"kg-media-placeholder ba b--whitegrey bg-whitegrey-l2","absolute absolute--fill bg-white-50"],null]]]],[12],[2,"\\n"],[6,[37,2],[[32,0,["isDraggedOver"]]],null,[["default","else"],[{"statements":[[2," "],[10,"span"],[14,0,"db center sans-serif fw7 f7 middarkgrey"],[12],[2,"\\n Drop it like it\'s hot 🔥\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,2],[[32,3,["isUploading"]]],null,[["default","else"],[{"statements":[[2," "],[1,[32,3,["progressBar"]]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,2],[[30,[36,7],[[32,0,["previewThumbnailSrc"]],[32,4,["src"]]],null]],null,[["default"],[{"statements":[[2," "],[11,"button"],[24,0,"flex flex-column items-center center sans-serif fw4 f7 middarkgrey pa16 pt14 pb14 kg-image-button"],[24,4,"button"],[4,[38,0],["click",[32,0,["triggerVideoFileDialog"]]],null],[12],[2,"\\n "],[1,[30,[36,1],["film-camera"],[["class"],["kg-placeholder-video"]]]],[2,"\\n "],[10,"span"],[14,0,"mt4 kg-upload-placeholder-text"],[12],[2,"Click to select a video"],[13],[2,"\\n"],[6,[37,2],[[32,3,["errors"]]],null,[["default"],[{"statements":[[2," "],[10,"span"],[14,0,"kg-upload-error"],[12],[2,"\\n "],[1,[30,[36,6],[[32,3,["errors"]],"0.message"],null]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"div"],[14,0,"kg-player-container"],[12],[2,"\\n "],[10,"div"],[15,0,[31,["kg-player ",[30,[36,2],[[30,[36,5],[[32,4,["cardWidth"]],"full"],null],"kg-player-full"],null]]]],[12],[2,"\\n "],[10,"button"],[14,0,"kg-player-play-icon"],[14,4,"button"],[12],[1,[30,[36,1],["play"],null]],[13],[2,"\\n "],[10,"span"],[14,0,"kg-player-current-time"],[12],[2,"0:00"],[13],[2,"\\n "],[10,"div"],[14,0,"kg-player-time"],[12],[2,"\\n /"],[10,"span"],[14,0,"kg-player-duration"],[12],[1,[32,0,["totalDuration"]]],[13],[2,"\\n "],[13],[2,"\\n "],[10,"input"],[14,0,"kg-player-seek-slider"],[14,"max","100"],[14,2,"0"],[14,4,"range"],[12],[13],[2,"\\n "],[10,"button"],[14,0,"kg-player-playback-rate"],[14,4,"button"],[12],[2,"1×"],[13],[2,"\\n "],[10,"button"],[14,0,"kg-player-unmute-icon"],[14,4,"button"],[12],[1,[30,[36,1],["unmute"],null]],[13],[2,"\\n "],[10,"input"],[14,0,"kg-player-volume-slider"],[14,"max","100"],[14,2,"70"],[14,4,"range"],[12],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n\\n "],[10,"div"],[14,5,"display:none"],[12],[2,"\\n "],[8,"gh-file-input",[],[["@multiple","@action","@accept","@onInsert"],[false,[32,3,["setFiles"]],[32,0,["videoMimeTypes"]],[32,0,["registerVideoFileInput"]]]],null],[2,"\\n "],[13],[2,"\\n "]],"parameters":[3]}]]],[2,"\\n\\n"],[6,[37,2],[[30,[36,8],[[32,7],[30,[36,12],[[32,4,["caption"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,2,["CaptionInput"]],[],[["@caption","@update","@placeholder"],[[32,4,["caption"]],[30,[36,4],[[32,0,["updatePayloadAttr"]],"caption"],null],"Type caption for video (optional)"]],null],[2,"\\n"]],"parameters":[]}]]]],"parameters":[2]}]]],[2,"\\n\\n"],[6,[37,2],[[30,[36,13],[[32,8],[32,4,["src"]]],null]],null,[["default"],[{"statements":[[2," "],[8,"koenig-settings-panel",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"kg-settings-panel-control kg-settings-panel-control-horizontal"],[12],[2,"\\n "],[10,"div"],[14,0,"kg-settings-panel-control-label"],[12],[2,"Video width"],[13],[2,"\\n "],[10,"div"],[14,0,"kg-settings-panel-control-input"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-btn-group icons"],[12],[2,"\\n "],[11,"button"],[24,"title","Regular"],[16,0,[31,["gh-btn gh-btn-icon ",[30,[36,3],[[32,4,["cardWidth"]],"gh-btn-group-selected"],null]]]],[24,4,"button"],[4,[38,0],["click",[30,[36,4],[[32,0,["updatePayloadAttr"]],"cardWidth",null],null]],null],[12],[10,"span"],[12],[1,[30,[36,1],["koenig/kg-img-regular"],[["class"],["fill-darkgrey"]]]],[13],[13],[2,"\\n "],[11,"button"],[24,"title","Wide"],[16,0,[31,["gh-btn gh-btn-icon ",[30,[36,2],[[30,[36,5],[[32,4,["cardWidth"]],"wide"],null],"gh-btn-group-selected"],null]]]],[24,4,"button"],[4,[38,0],["click",[30,[36,4],[[32,0,["updatePayloadAttr"]],"cardWidth","wide"],null]],null],[12],[10,"span"],[12],[1,[30,[36,1],["koenig/kg-img-wide"],[["class"],["fill-darkgrey"]]]],[13],[13],[2,"\\n "],[11,"button"],[24,"title","Full"],[16,0,[31,["gh-btn gh-btn-icon ",[30,[36,2],[[30,[36,5],[[32,4,["cardWidth"]],"full"],null],"gh-btn-group-selected"],null]]]],[24,4,"button"],[4,[38,0],["click",[30,[36,4],[[32,0,["updatePayloadAttr"]],"cardWidth","full"],null]],null],[12],[10,"span"],[12],[1,[30,[36,1],["koenig/kg-img-full"],[["class"],["fill-darkgrey"]]]],[13],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"kg-settings-panel-control kg-settings-panel-control-horizontal"],[12],[2,"\\n "],[10,"label"],[14,0,"kg-settings-panel-control-label"],[14,"for","loop-toggle"],[12],[2,"Loop"],[13],[2,"\\n "],[10,"div"],[14,0,"kg-settings-panel-control-input"],[12],[2,"\\n "],[10,"div"],[14,0,"for-switch x-small"],[12],[2,"\\n "],[10,"label"],[14,0,"switch"],[12],[2,"\\n "],[11,"input"],[24,0,"gh-input"],[24,1,"loop-toggle"],[16,"checked",[32,4,["loop"]]],[24,4,"checkbox"],[4,[38,0],["input",[32,0,["toggleLoop"]]],null],[12],[13],[2,"\\n "],[10,"span"],[14,0,"input-toggle-component mt1"],[12],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"kg-settings-panel-control-info video"],[12],[2,"Autoplay your video on a loop without sound."],[13],[2,"\\n\\n "],[8,"gh-uploader",[],[["@uploadUrl","@accept","@extensions","@onStart","@onComplete"],["/images/upload/",[32,0,["imageMimeTypes"]],[32,0,["imageExtensions"]],[32,0,["customThumbnailUploadStarted"]],[32,0,["customThumbnailUploadCompleted"]]]],[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,3],[[32,4,["loop"]]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"kg-settings-panel-control"],[12],[2,"\\n "],[10,"label"],[14,0,"kg-settings-panel-control-label"],[12],[2,"Custom thumbnail"],[13],[2,"\\n "],[10,"div"],[14,0,"kg-settings-panel-control-input"],[12],[2,"\\n "],[10,"div"],[14,0,"relative w-100"],[12],[2,"\\n"],[6,[37,2],[[32,1,["isUploading"]]],null,[["default","else"],[{"statements":[[2," "],[10,"div"],[14,0,"kg-upload-thumbnail-xl"],[12],[2,"\\n "],[1,[32,1,["progressBar"]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,2],[[32,4,["customThumbnailSrc"]]],null,[["default","else"],[{"statements":[[2," "],[10,"div"],[14,0,"kg-thumbnail-xl-container"],[12],[2,"\\n "],[11,"img"],[24,0,"kg-thumbnail-xl"],[16,"src",[32,4,["customThumbnailSrc"]]],[4,[38,0],["click",[32,1,["triggerFileDialog"]]],null],[12],[13],[2,"\\n "],[10,"div"],[14,0,"image-overlay"],[12],[2,"\\n "],[10,"div"],[14,0,"flex flex-row-reverse"],[12],[2,"\\n "],[11,"button"],[24,0,"bg-white-90 br3 pe-auto"],[24,4,"button"],[4,[38,0],["click",[32,0,["deleteCustomThumbnail"]]],null],[12],[2,"\\n "],[1,[30,[36,1],["koenig/kg-trash"],[["class"],["kg-replace-icon fill-darkgrey"]]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[11,"button"],[24,0,"gh-btn kg-upload-thumbnail-xl"],[24,4,"button"],[4,[38,0],["click",[32,1,["triggerFileDialog"]]],null],[12],[2,"\\n "],[1,[30,[36,1],["upload-fill"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[10,"div"],[14,5,"display:none"],[12],[2,"\\n "],[8,"gh-file-input",[],[["@multiple","@action","@accept","@onInsert"],[false,[32,1,["setFiles"]],[32,0,["imageMimeTypes"]],[32,1,["registerFileInput"]]]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"],[6,[37,2],[true],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"kg-settings-panel-control-info"],[12],[2,"\\n "],[10,"span"],[14,0,"red"],[12],[2,"The file type you uploaded is not supported. Please use .MP4, .WEBM, .OGV"],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[2," "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[1]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["on","svg-jar","if","unless","fn","eq","get","not","or","kg-style","concat","did-insert","clean-basic-html","and"]}',moduleName:"koenig-editor/components/koenig-card-video.hbs"}),L=["mp4","webm","ogv"]
12318
12318
  e.VIDEO_EXTENSIONS=L
12319
12319
  const F=["video/mp4","video/webm","video/ogg"]
12320
12320
  e.VIDEO_MIME_TYPES=F
@@ -13677,4 +13677,4 @@ return void 0===n&&(n=(0,t.createStorage)(null,(()=>!1)),r.set(e,n)),n}dirtyStor
13677
13677
  r&&(0,t.setValue)(r,null)}constructor(e){o(this,"storages",new WeakMap),o(this,"vals",void 0),this.vals=new WeakSet(e)}has(e){return(0,t.getValue)(this.storageFor(e)),this.vals.has(e)}add(e){return this.vals.add(e),this.dirtyStorageFor(e),this}delete(e){return this.dirtyStorageFor(e),this.vals.delete(e)}get[i](){return this.vals[Symbol.toStringTag]}}e.TrackedWeakSet=s,Object.setPrototypeOf(s.prototype,WeakSet.prototype)})),define("tracked-built-ins/index",["exports","tracked-built-ins/-private/decorator","tracked-built-ins/-private/array","tracked-built-ins/-private/object","tracked-built-ins/-private/map","tracked-built-ins/-private/set"],(function(e,t,r,n,i,o){"use strict"
13678
13678
  Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"TrackedArray",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(e,"TrackedMap",{enumerable:!0,get:function(){return i.TrackedMap}}),Object.defineProperty(e,"TrackedObject",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(e,"TrackedSet",{enumerable:!0,get:function(){return o.TrackedSet}}),Object.defineProperty(e,"TrackedWeakMap",{enumerable:!0,get:function(){return i.TrackedWeakMap}}),Object.defineProperty(e,"TrackedWeakSet",{enumerable:!0,get:function(){return o.TrackedWeakSet}}),Object.defineProperty(e,"tracked",{enumerable:!0,get:function(){return t.default}})}))
13679
13679
 
13680
- //# sourceMappingURL=vendor-88c5114bd6fdce352a32a0ac1fd4f32b.map
13680
+ //# sourceMappingURL=vendor-fadbf85ad92c591dc4bd3755312b6ddf.map
@@ -8,7 +8,7 @@
8
8
  <title>Ghost Admin</title>
9
9
 
10
10
 
11
- <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%225.29%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%7D" />
11
+ <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%225.30%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%7D" />
12
12
 
13
13
  <meta name="HandheldFriendly" content="True" />
14
14
  <meta name="MobileOptimized" content="320" />
@@ -37,7 +37,7 @@
37
37
  </style>
38
38
 
39
39
  <link integrity="" rel="stylesheet" href="assets/vendor-3e6947aa681f0fb82b193090e520dc73.css">
40
- <link integrity="" rel="stylesheet" href="assets/ghost-1532517fd24b662b42a85ea0881865a5.css" title="light">
40
+ <link integrity="" rel="stylesheet" href="assets/ghost-d3e45940f0f1601232d464d0b429d45f.css" title="light">
41
41
 
42
42
 
43
43
  </head>
@@ -56,9 +56,9 @@
56
56
 
57
57
  <div id="ember-basic-dropdown-wormhole"></div>
58
58
 
59
- <script src="assets/vendor-88c5114bd6fdce352a32a0ac1fd4f32b.js"></script>
60
- <script src="assets/chunk.45.87cd3fcd0323d4103a17.js"></script>
61
- <script src="assets/chunk.143.b610199533b562d3f4bb.js"></script>
62
- <script src="assets/ghost-4005771a511aaabd6545fb9645cfa24a.js"></script>
59
+ <script src="assets/vendor-fadbf85ad92c591dc4bd3755312b6ddf.js"></script>
60
+ <script src="assets/chunk.47.f29250a4560868c21293.js"></script>
61
+ <script src="assets/chunk.143.f9aa3f7f1c45d1d921cd.js"></script>
62
+ <script src="assets/ghost-23dc524374e35a582886c36f7dacdb05.js"></script>
63
63
  </body>
64
64
  </html>
@@ -78,8 +78,8 @@ module.exports = {
78
78
  message: tpl(messages.postNotFound)
79
79
  });
80
80
  }
81
- const {emails = [], memberSegment} = frame.data;
82
- return await mega.mega.sendTestEmail(model, emails, memberSegment);
81
+ const {emails = [], memberSegment, newsletter = ''} = frame.data;
82
+ return await mega.mega.sendTestEmail(model, emails, memberSegment, newsletter);
83
83
  }
84
84
  }
85
85
  };
@@ -0,0 +1,21 @@
1
+ const logging = require('@tryghost/logging');
2
+
3
+ const {createTransactionalMigration} = require('../../utils');
4
+
5
+ module.exports = createTransactionalMigration(
6
+ async function up(knex) {
7
+ const membersWithSuppressedEmails = await knex.select('members.id').from('members').innerJoin('suppressions', 'members.email', 'suppressions.email');
8
+
9
+ if (membersWithSuppressedEmails.length === 0) {
10
+ logging.info('No emails suppressions found');
11
+ return;
12
+ } else {
13
+ logging.info(`Unsubscribing ${membersWithSuppressedEmails.length} members from newsletters due to email suppressions`);
14
+ }
15
+
16
+ await knex('members_newsletters').whereIn('member_id', membersWithSuppressedEmails.map(member => member.id)).del();
17
+ },
18
+ async function down() {
19
+ logging.info('Not repopulating members_newsletters');
20
+ }
21
+ );
@@ -51,6 +51,9 @@ const Member = ghostBookshelf.Model.extend({
51
51
  // Currently we cannot expand on values such as null or a string in mongo-knex
52
52
  // But the line below is essentially the same as: `email_recipients.opened_at:-null`
53
53
  expansion: 'email_recipients.opened_at:>=0'
54
+ }, {
55
+ key: 'offer_redemptions',
56
+ replacement: 'offer_redemptions.offer_id'
54
57
  }];
55
58
  },
56
59
 
@@ -119,6 +122,11 @@ const Member = ghostBookshelf.Model.extend({
119
122
  tableNameAs: 'feedback',
120
123
  type: 'oneToOne',
121
124
  joinFrom: 'member_id'
125
+ },
126
+ offer_redemptions: {
127
+ tableName: 'offer_redemptions',
128
+ type: 'oneToOne',
129
+ joinFrom: 'member_id'
122
130
  }
123
131
  };
124
132
  },
@@ -144,7 +152,8 @@ const Member = ghostBookshelf.Model.extend({
144
152
  newsletters: 'newsletters',
145
153
  labels: 'labels',
146
154
  stripeCustomers: 'members_stripe_customers',
147
- email_recipients: 'email_recipients'
155
+ email_recipients: 'email_recipients',
156
+ offers: 'offers'
148
157
  },
149
158
 
150
159
  productEvents() {
@@ -1,4 +1,3 @@
1
- const {Color} = require('@tryghost/color-utils');
2
1
  const audienceFeedback = require('../audience-feedback');
3
2
 
4
3
  const templateStrings = {
@@ -24,20 +23,16 @@ const generateLinks = (postId, uuid, html) => {
24
23
  return html;
25
24
  };
26
25
 
27
- const getTemplate = (accentColor) => {
26
+ const getTemplate = () => {
28
27
  const likeButtonHtml = getButtonHtml(
29
28
  templateStrings.like,
30
29
  'More like this',
31
- accentColor,
32
- 'like-icon',
33
- 'https://static.ghost.org/v5.0.0/images/thumbs-up.png'
30
+ 'https://static.ghost.org/v5.0.0/images/more-like-this.png'
34
31
  );
35
32
  const dislikeButtonHtml = getButtonHtml(
36
33
  templateStrings.dislike,
37
34
  'Less like this',
38
- accentColor,
39
- 'dislike-icon',
40
- 'https://static.ghost.org/v5.0.0/images/thumbs-down.png'
35
+ 'https://static.ghost.org/v5.0.0/images/less-like-this.png'
41
36
  );
42
37
 
43
38
  return (`
@@ -55,106 +50,17 @@ const getTemplate = (accentColor) => {
55
50
  `);
56
51
  };
57
52
 
58
- function getButtonHtml(href, buttonText, accentColor, className, iconUrl) {
59
- const bgColor = getButtonLightTheme(accentColor).backgroundColor;
60
- const textColor = getButtonLightTheme(accentColor).color;
61
- const buttonAttr = {
62
- width: 100,
63
- height: 38,
64
- iconWidth: 24
65
- };
66
-
67
- // Sizes defined in pixels won’t be adjusted when Outlook is rendering at 120 dpi.
68
- // To solve the problem we use values in points (1 pixel = 0.75 point).
69
- // resource: https://www.hteumeuleu.com/2021/background-properties-in-vml/
70
- const buttonAttrOutlook = {
71
- width: (buttonAttr.width + buttonAttr.iconWidth) * 0.75,
72
- height: buttonAttr.height * 0.75 + 1,
73
- iconWidth: buttonAttr.iconWidth * 0.75
74
- };
75
-
53
+ function getButtonHtml(href, buttonText, iconUrl) {
76
54
  return (`
77
- <td dir="ltr" valign="top" align="center" style="vertical-align: top; color: ${textColor}; font-family: inherit; font-size: 14px; text-align: center; padding: 0 8px;" nowrap>
78
- <table class="feedback-buttons" align="center" role="presentation" cellspacing="0" cellpadding="0" border="0" style="background-color: ${bgColor}; overflow: hidden; border-radius: 22px;border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: auto;">
79
- <tr>
80
- <td width="16" height="${buttonAttr.height}"></td>
81
- <td class=${className} background=${iconUrl} bgcolor="${textColor}" width="${buttonAttr.iconWidth}" height="${buttonAttr.height}" valign="top" style="background-image: url(${iconUrl});vertical-align: middle; text-align: center;background-size: cover; background-position: 0 50%; background-repeat:no-repeat;">
82
- <!--[if gte mso 9]>
83
- <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="width:${buttonAttrOutlook.iconWidth}pt;height:${buttonAttrOutlook.height}pt;">
84
- <v:fill origin="0.5, 0.5" position="0.5, 0.5" type="tile" src=${iconUrl} color="${textColor}" size="1,1" aspect="atleast" />
85
- <v:textbox inset="0,0,0,0">
86
- <![endif]-->
87
- <div>
88
- <a style="background-color: ${bgColor};border: none; width: ${buttonAttr.iconWidth}px; height: ${buttonAttr.height}px; display: block" href=${href} target="_blank"></a>
89
- </div>
90
- <!--[if gte mso 9]>
91
- </v:textbox>
92
- </v:rect>
93
- <![endif]-->
94
- </td>
95
- <td style="text-align: right;font-size: 18px; vertical-align: middle; color: ${textColor}!important; background-position: 0; padding: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';">
96
- <div style="color: ${textColor}"><!--[if mso]>
97
- <v:rect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word" href=${href} style="height:${buttonAttrOutlook.height}pt;v-text-anchor:middle;width:${buttonAttrOutlook.width}pt;" stroke="f">
98
- <w:anchorlock/>
99
- <center>
100
- <![endif]-->
101
- <a
102
- href=${href}
103
- target="_blank"
104
- style="padding: 0 8px 0 8px;border-radius: 0 22px 22px 0;color:${textColor}!important;display:inline-block;font-family: inherit;font-size:14px;font-weight:bold;line-height:38px;text-align:left;text-decoration:none;width:100px;-webkit-text-size-adjust:none;">
105
- ${buttonText}</a>
106
- <!--[if mso]>
107
- </center>
108
- </v:rect>
109
- <![endif]--></div>
110
- </td>
111
- </tr>
112
- </table>
55
+ <td dir="ltr" valign="top" align="center" style="vertical-align: top; font-family: inherit; font-size: 14px; text-align: center; padding: 0 8px;" nowrap>
56
+ <a href="${href}" target="_blank">
57
+ <img src="${iconUrl}" border="0" width="156" height="38" alt="${buttonText}">
58
+ </a>
113
59
  </td>
114
60
  `);
115
61
  }
116
62
 
117
- function getButtonLightTheme(accentColor) {
118
- const color = new Color(accentColor);
119
- const backgroundColor = `${accentColor}10`;
120
- const textColor = color.darken(0.6).hex();
121
-
122
- return {
123
- color: textColor,
124
- backgroundColor
125
- };
126
- }
127
-
128
- /**
129
- * @deprecated
130
- * PLEASE MAKE IDENTICAL CHANGES TO email-service package email-templates/styles.hbs
131
- */
132
- function getButtonsHeadStyles() {
133
- // DEPRECATED!
134
- // PLEASE MAKE IDENTICAL CHANGES TO email-service package email-templates/styles.hbs
135
- return (`
136
- .like-icon {
137
- mix-blend-mode: darken;
138
- }
139
-
140
- .dislike-icon {
141
- mix-blend-mode: darken;
142
- }
143
-
144
- @media (prefers-color-scheme: dark) {
145
- .like-icon {
146
- mix-blend-mode: initial !important;
147
- }
148
-
149
- .dislike-icon {
150
- mix-blend-mode: initial !important;
151
- }
152
- }
153
- `);
154
- }
155
-
156
63
  module.exports = {
157
64
  generateLinks,
158
- getTemplate,
159
- getButtonsHeadStyles
65
+ getTemplate
160
66
  };
@@ -50,9 +50,15 @@ const getReplyToAddress = (fromAddress, replyAddressOption) => {
50
50
  *
51
51
  * @param {Object} postModel - post model instance
52
52
  * @param {Object} options
53
+ * @param {Object} options
53
54
  */
54
55
  const getEmailData = async (postModel, options) => {
55
- let newsletter = await postModel.getLazyRelation('newsletter');
56
+ let newsletter;
57
+ if (options.newsletterSlug) {
58
+ newsletter = await models.Newsletter.findOne({slug: options.newsletterSlug});
59
+ } else {
60
+ newsletter = await postModel.getLazyRelation('newsletter');
61
+ }
56
62
  if (!newsletter) {
57
63
  // The postModel doesn't have a newsletter in test emails
58
64
  newsletter = await models.Newsletter.getDefaultNewsletter();
@@ -85,8 +91,8 @@ const getEmailData = async (postModel, options) => {
85
91
  * @param {[string]} toEmails - member email addresses to send email to
86
92
  * @param {ValidMemberSegment} [memberSegment]
87
93
  */
88
- const sendTestEmail = async (postModel, toEmails, memberSegment) => {
89
- let emailData = await getEmailData(postModel, {isTestEmail: true});
94
+ const sendTestEmail = async (postModel, toEmails, memberSegment, newsletterSlug) => {
95
+ let emailData = await getEmailData(postModel, {isTestEmail: true, newsletterSlug});
90
96
  emailData.subject = `[Test] ${emailData.subject}`;
91
97
 
92
98
  // fetch any matching members so that replacements use expected values
@@ -1174,8 +1174,6 @@ ${ templateSettings.showBadge ? `
1174
1174
  }
1175
1175
  ` : ''}
1176
1176
 
1177
- ${iff(templateSettings.feedbackEnabled, feedbackButtons.getButtonsHeadStyles(templateSettings.accentColor), '')}
1178
-
1179
1177
  </style>
1180
1178
  </head>
1181
1179
 
@@ -1281,7 +1279,7 @@ ${iff(templateSettings.feedbackEnabled, feedbackButtons.getButtonsHeadStyles(tem
1281
1279
 
1282
1280
  <!-- END MAIN CONTENT AREA -->
1283
1281
 
1284
- ${iff(templateSettings.feedbackEnabled, feedbackButtons.getTemplate(templateSettings.accentColor), '')}
1282
+ ${iff(templateSettings.feedbackEnabled, feedbackButtons.getTemplate(), '')}
1285
1283
 
1286
1284
  <tr>
1287
1285
  <td class="wrapper" align="center">
@@ -170,7 +170,7 @@
170
170
  },
171
171
  "portal": {
172
172
  "url": "https://cdn.jsdelivr.net/ghost/portal@~{version}/umd/portal.min.js",
173
- "version": "2.23"
173
+ "version": "2.24"
174
174
  },
175
175
  "sodoSearch": {
176
176
  "url": "https://cdn.jsdelivr.net/ghost/sodo-search@~{version}/umd/sodo-search.min.js",
@@ -15,6 +15,7 @@ const messages = {
15
15
 
16
16
  // flags in this list always return `true`, allows quick global enable prior to full flag removal
17
17
  const GA_FEATURES = [
18
+ 'suppressionList',
18
19
  'sourceAttribution',
19
20
  'memberAttribution',
20
21
  'audienceFeedback',
@@ -24,15 +25,14 @@ const GA_FEATURES = [
24
25
  // NOTE: this allowlist is meant to be used to filter out any unexpected
25
26
  // input for the "labs" setting value
26
27
  const BETA_FEATURES = [
27
- 'activitypub'
28
+ 'activitypub',
29
+ 'emailStability'
28
30
  ];
29
31
 
30
32
  const ALPHA_FEATURES = [
31
33
  'urlCache',
32
34
  'beforeAfterCard',
33
- 'lexicalEditor',
34
- 'suppressionList',
35
- 'emailStability'
35
+ 'lexicalEditor'
36
36
  ];
37
37
 
38
38
  module.exports.GA_KEYS = [...GA_FEATURES];
package/loggingrc.js CHANGED
@@ -11,6 +11,9 @@ if (!loggingConfig.path) {
11
11
  // Additional values used by logging
12
12
  loggingConfig.env = config.get('env');
13
13
  loggingConfig.domain = config.get('url');
14
+ loggingConfig.metadata = {
15
+ version: ghostVersion.original
16
+ };
14
17
 
15
18
  // Config for metrics
16
19
  loggingConfig.metrics = config.get('logging:metrics') || {};