diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/body-layout/body-layout.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/body-layout/body-layout.element.ts index e6ca7e96e0..9a22e67fe9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/body-layout/body-layout.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/body-layout/body-layout.element.ts @@ -1,4 +1,13 @@ -import { css, html, LitElement, nothing, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; +import { + css, + html, + LitElement, + nothing, + customElement, + property, + state, + query, +} from '@umbraco-cms/backoffice/external/lit'; import { UUITextStyles } from '@umbraco-cms/backoffice/external/uui'; /** @@ -23,9 +32,15 @@ export class UmbBodyLayoutElement extends LitElement { * @attr {string} clear-header - renders the header without background and borders. * @default '' */ + + @query('#main') scrollContainer?: HTMLElement; + @property() public headline = ''; + @property({ type: Boolean, reflect: true, attribute: 'scroll-shadow' }) + public scrollShadow = false; + @state() private _headerSlotHasChildren = false; @@ -45,6 +60,25 @@ export class UmbBodyLayoutElement extends LitElement { return (e.target as HTMLSlotElement).assignedNodes({ flatten: true }).length > 0; }; + connectedCallback(): void { + super.connectedCallback(); + if (this.scrollShadow) { + requestAnimationFrame(() => { + this.scrollContainer?.addEventListener('scroll', this.#onScroll); + }); + } + } + + disconnectedCallback(): void { + super.disconnectedCallback(); + this.scrollContainer?.removeEventListener('scroll', this.#onScroll); + } + + #onScroll = () => { + if (!this.scrollContainer) return; + this.toggleAttribute('scrolling', this.scrollContainer.scrollTop > 0); + }; + render() { return html`