diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/entity-action-list.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/entity-action-list.element.ts index 17b15475c1a8..ac55ab9857b0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/entity-action-list.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/entity-action-list.element.ts @@ -59,6 +59,30 @@ export class UmbEntityActionListElement extends UmbLitElement { }; } + + +override focus() { + const extensionComponent = this.renderRoot.querySelector('umb-extension-with-api-slot'); + if (!extensionComponent) return; + + // Wait for the slot component to render + extensionComponent.updateComplete.then(() => { + const firstEntityAction = extensionComponent.shadowRoot?.querySelector('umb-entity-action'); + if (!firstEntityAction) return; + + firstEntityAction.updateComplete.then(() => { + const firstMenuItem = firstEntityAction.shadowRoot?.querySelector('uui-menu-item'); + + firstMenuItem?.updateComplete?.then(() => { + const labelButton = firstMenuItem.shadowRoot?.querySelector('#label-button') as HTMLElement; + labelButton?.focus(); + }); + }); + }); +} + + + #hasRenderedOnce?: boolean; override render() { return this._filter diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/global-components/entity-actions-dropdown/entity-actions-dropdown.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/global-components/entity-actions-dropdown/entity-actions-dropdown.element.ts index 7c5d4da98cd5..801e7b9f7952 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/global-components/entity-actions-dropdown/entity-actions-dropdown.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/global-components/entity-actions-dropdown/entity-actions-dropdown.element.ts @@ -1,6 +1,6 @@ import type { UmbDropdownElement } from '../../../components/dropdown/index.js'; import { UmbEntityActionListElement } from '../../entity-action-list.element.js'; -import { html, customElement, property, css, query } from '@umbraco-cms/backoffice/external/lit'; +import { html, customElement, property, css, query, nothing } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UUIScrollContainerElement } from '@umbraco-cms/backoffice/external/uui'; import { UMB_ENTITY_CONTEXT, type UmbEntityModel } from '@umbraco-cms/backoffice/entity'; @@ -48,8 +48,9 @@ export class UmbEntityActionsDropdownElement extends UmbLitElement { } #onDropdownOpened() { - if (this.#scrollContainerElement) { - return; // Already created + if (this.#entityActionListElement) { + this.#entityActionListElement.focus(); + return; } // First create dropdown content when the dropdown is opened. @@ -64,11 +65,16 @@ export class UmbEntityActionsDropdownElement extends UmbLitElement { this._dropdownElement?.appendChild(this.#scrollContainerElement); } + override render() { return html` + !['umb-entity-action-list', 'uui-scroll-container'].includes((e.relatedTarget as HTMLElement)?.tagName.toLowerCase() || '') + && this.#onActionExecuted() + } .label=${this.label} ?compact=${this.compact} hide-expand> diff --git a/src/Umbraco.Web.UI/appsettings.Development.template.json b/src/Umbraco.Web.UI/appsettings.Development.template.json index 5b8bc438a94e..e28da3a1029d 100644 --- a/src/Umbraco.Web.UI/appsettings.Development.template.json +++ b/src/Umbraco.Web.UI/appsettings.Development.template.json @@ -24,7 +24,7 @@ ] }, "Umbraco": { - "CMS": { + "CMS": "Examine": { "LuceneDirectoryFactory": "TempFileSystemDirectoryFactory" },