diff --git a/ghost/admin/app/styles/app-dark.css b/ghost/admin/app/styles/app-dark.css
index 64c3366cdd..723dc23f18 100644
--- a/ghost/admin/app/styles/app-dark.css
+++ b/ghost/admin/app/styles/app-dark.css
@@ -1135,6 +1135,7 @@ kbd {
/* Finishing touches */
/* ---------------------------------------------------- */
+
.gh-done {
background: #15171A;
}
@@ -1292,4 +1293,25 @@ kbd {
.gh-input-group-tier-trial-disabled .gh-input-append:before {
background: #0e0f11;
+}
+
+
+/* Settings Links */
+
+.kg-settings-link-url::before {
+ background: rgb(28,30,33);
+ background: linear-gradient(90deg, rgba(28,30,33,1) 0%, rgba(28,30,33,0) 100%);
+}
+
+.kg-settings-link-url::after {
+ background: rgb(28,30,33);
+ background: linear-gradient(90deg, rgba(28,30,33,0) 0%, rgba(28,30,33,1) 100%);
+}
+
+.ember-power-select-option[aria-current="true"] .kg-settings-link-url.scroller::before {
+ background: linear-gradient(90deg, rgba(19,20,22,1) 0%, rgba(19,20,22,0) 100%);
+}
+
+.ember-power-select-option[aria-current="true"] .kg-settings-link-url::after {
+ background: linear-gradient(90deg, rgba(19,20,22,0) 0%, rgba(19,20,22,1) 100%);
}
\ No newline at end of file
diff --git a/ghost/admin/app/styles/layouts/editor.css b/ghost/admin/app/styles/layouts/editor.css
index 9056fb8783..f744bcbcd3 100644
--- a/ghost/admin/app/styles/layouts/editor.css
+++ b/ghost/admin/app/styles/layouts/editor.css
@@ -1013,10 +1013,59 @@ figure {
}
.kg-settings-link-url {
+ position: relative;
display: block;
+ width: 100%;
+ overflow: hidden;
+ padding: 0;
+ margin: 0;
+ text-align: left;
+}
+
+.kg-settings-link-url::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: -20px;
+ width: 20px;
+ height: 100%;
+ background: rgb(255,255,255);
+ background: linear-gradient(90deg, rgba(255,255,255,1) 0%, rgba(255,255,255,0) 100%);
+ z-index: 999;
+ opacity: 0;
+ transition: all 250ms ease-out;
+}
+
+.kg-settings-link-url::after {
+ content: '';
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 20px;
+ height: 100%;
+ background: rgb(255,255,255);
+ background: linear-gradient(90deg, rgba(255,255,255,0) 0%, rgba(255,255,255,1) 100%);
+ z-index: 999;
+}
+
+.ember-power-select-option[aria-current="true"] .kg-settings-link-url.scroller::before {
+ opacity: 1;
+ left: 0;
+ background: linear-gradient(90deg, rgba(244,245,245,1) 0%, rgba(244,245,245,0) 100%);
+}
+
+.ember-power-select-option[aria-current="true"] .kg-settings-link-url::after {
+ background: linear-gradient(90deg, rgba(244,245,245,0) 0%, rgba(244,245,245,1) 100%);
+}
+
+.kg-settings-link-url > span {
+ display: inline-block;
font-weight: 400;
font-size: 1.2rem;
color: var(--midgrey);
letter-spacing: 0;
line-height: 1.3em;
-}
\ No newline at end of file
+ transition: transform 250ms ease-in-out;
+ transform: translateX(0); /* used for dynamic positioning with js */
+ padding-right: 8px; /* extra padding used for dynamic positioning with js */
+}
diff --git a/ghost/admin/lib/koenig-editor/addon/components/koenig-card-button.hbs b/ghost/admin/lib/koenig-editor/addon/components/koenig-card-button.hbs
index 12a93c0db4..63ec52e771 100644
--- a/ghost/admin/lib/koenig-editor/addon/components/koenig-card-button.hbs
+++ b/ghost/admin/lib/koenig-editor/addon/components/koenig-card-button.hbs
@@ -84,7 +84,7 @@
as |suggestion|
>
{{suggestion.name}}
- {{suggestion.url}}
+ {{suggestion.url}}
diff --git a/ghost/admin/lib/koenig-editor/addon/components/koenig-card-button.js b/ghost/admin/lib/koenig-editor/addon/components/koenig-card-button.js
index 038fac7c13..1aad511b7d 100644
--- a/ghost/admin/lib/koenig-editor/addon/components/koenig-card-button.js
+++ b/ghost/admin/lib/koenig-editor/addon/components/koenig-card-button.js
@@ -18,6 +18,8 @@ export default class KoenigCardButtonComponent extends Component {
@tracked contentFocused = false;
@tracked offers = null;
+ linkScrollerTimeout = null; // needs to be global so can be cleared when needed across functions
+
get isEmpty() {
const {buttonText, buttonUrl} = this.args.payload;
@@ -135,6 +137,32 @@ export default class KoenigCardButtonComponent extends Component {
document.querySelector(selector)?.focus();
}
+ @action
+ enterLinkURL(event) {
+ event.stopPropagation();
+ const parent = event.target;
+ const child = event.target.querySelector('span');
+
+ clearTimeout(this.linkScrollerTimeout);
+ if (child.offsetWidth > parent.offsetWidth) {
+ this.linkScrollerTimeout = setTimeout(() => {
+ parent.classList.add('scroller');
+ child.style.transform = `translateX(-${(child.offsetWidth - parent.offsetWidth) + 8}px)`;
+ }, 100);
+ }
+ }
+
+ @action
+ leaveLinkURL(event) {
+ event.stopPropagation();
+ clearTimeout(this.linkScrollerTimeout);
+ const parent = event.target;
+ const child = event.target.querySelector('span');
+
+ child.style.transform = 'translateX(0)';
+ parent.classList.remove('scroller');
+ }
+
@task({restartable: true})
*fetchOffersTask() {
this.offers = yield this.store.query('offer', {limit: 'all', filter: 'status:active'});
diff --git a/ghost/admin/lib/koenig-editor/addon/components/koenig-card-email-cta.hbs b/ghost/admin/lib/koenig-editor/addon/components/koenig-card-email-cta.hbs
index bd7268199d..8a8cb608f5 100644
--- a/ghost/admin/lib/koenig-editor/addon/components/koenig-card-email-cta.hbs
+++ b/ghost/admin/lib/koenig-editor/addon/components/koenig-card-email-cta.hbs
@@ -148,7 +148,7 @@
as |suggestion|
>
{{suggestion.name}}
- {{suggestion.url}}
+ {{suggestion.url}}
diff --git a/ghost/admin/lib/koenig-editor/addon/components/koenig-card-email-cta.js b/ghost/admin/lib/koenig-editor/addon/components/koenig-card-email-cta.js
index 475f928e63..d46168c0d8 100644
--- a/ghost/admin/lib/koenig-editor/addon/components/koenig-card-email-cta.js
+++ b/ghost/admin/lib/koenig-editor/addon/components/koenig-card-email-cta.js
@@ -24,6 +24,7 @@ export default class KoenigCardEmailCtaComponent extends Component {
buttonTextInputId = 'button-text-input-' + guidFor(this);
urlInputId = 'url-input-' + guidFor(this);
+ linkScrollerTimeout = null; // needs to be global so can be cleared when needed across functions
get isEmpty() {
const {html, showButton, buttonText, buttonUrl} = this.args.payload;
@@ -215,6 +216,32 @@ export default class KoenigCardEmailCtaComponent extends Component {
document.querySelector(selector)?.focus();
}
+ @action
+ enterLinkURL(event) {
+ event.stopPropagation();
+ const parent = event.target;
+ const child = event.target.querySelector('span');
+
+ clearTimeout(this.linkScrollerTimeout);
+ if (child.offsetWidth > parent.offsetWidth) {
+ this.linkScrollerTimeout = setTimeout(() => {
+ parent.classList.add('scroller');
+ child.style.transform = `translateX(-${(child.offsetWidth - parent.offsetWidth) + 8}px)`;
+ }, 100);
+ }
+ }
+
+ @action
+ leaveLinkURL(event) {
+ event.stopPropagation();
+ clearTimeout(this.linkScrollerTimeout);
+ const parent = event.target;
+ const child = event.target.querySelector('span');
+
+ child.style.transform = 'translateX(0)';
+ parent.classList.remove('scroller');
+ }
+
@task({restartable: true})
*fetchOffersTask() {
this.offers = yield this.store.query('offer', {limit: 'all', filter: 'status:active'});