diff --git a/Directory.Packages.props b/Directory.Packages.props index 04809997fa..d41b6eb92c 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -7,13 +7,17 @@ - + - + + + + + diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-type/components/input-block-type/input-block-type.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-type/components/input-block-type/input-block-type.element.ts index c44cc0369f..d4d60b54c6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-type/components/input-block-type/input-block-type.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-type/components/input-block-type/input-block-type.element.ts @@ -106,6 +106,12 @@ export class UmbInputBlockTypeElement< presetAlias: 'element', }, }, + // TODO: hide the queryParams and filter config under a "elementTypesOnly" field. [MR] + search: { + queryParams: { + isElementType: true, + }, + }, pickableFilter: (docType) => // Only pick elements: docType.isElement && diff --git a/src/Umbraco.Web.UI.Client/src/packages/content/content-type/global-components/content-type-workspace-editor-header.element.ts b/src/Umbraco.Web.UI.Client/src/packages/content/content-type/global-components/content-type-workspace-editor-header.element.ts index 16d1524652..aed4ff718d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/content/content-type/global-components/content-type-workspace-editor-header.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/content/content-type/global-components/content-type-workspace-editor-header.element.ts @@ -126,15 +126,16 @@ export class UmbContentTypeWorkspaceEditorHeaderElement extends UmbLitElement { display: flex; flex: 1 1 auto; flex-direction: column; - gap: var(--uui-size-space-1); } #name { width: 100%; + z-index: 1; } #description { width: 100%; + margin-top: 1px; --uui-input-height: var(--uui-size-8); --uui-input-border-color: transparent; } @@ -147,6 +148,8 @@ export class UmbContentTypeWorkspaceEditorHeaderElement extends UmbLitElement { font-size: var(--uui-size-8); height: 60px; width: 60px; + --uui-button-border-color: transparent; + --uui-button-border-color-hover: var(--uui-color-border); } `, ]; 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 a9a5ff2f54..14a5caa954 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 @@ -101,13 +101,6 @@ export class UmbBodyLayoutElement extends LitElement { this._headerSlotHasChildren = this.#hasNodes(e); this.#setSlotVisibility(e.target as HTMLElement, this._headerSlotHasChildren); }}> - { - this._navigationSlotHasChildren = this.#hasNodes(e); - this.#setSlotVisibility(e.target as HTMLElement, this._navigationSlotHasChildren); - }}> + { + this._navigationSlotHasChildren = this.#hasNodes(e); + this.#setSlotVisibility(e.target as HTMLElement, this._navigationSlotHasChildren); + }}> @@ -204,7 +204,6 @@ export class UmbBodyLayoutElement extends LitElement { box-sizing: border-box; min-width: 0; } - #navigation-slot { margin-left: auto; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/picker/search/picker-search-result.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/picker/search/picker-search-result.element.ts index 7b74306a45..4437d9b0b9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/picker/search/picker-search-result.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/picker/search/picker-search-result.element.ts @@ -1,11 +1,13 @@ import { UMB_PICKER_CONTEXT } from '../picker.context.token.js'; import type { UmbPickerContext } from '../picker.context.js'; import type { ManifestPickerSearchResultItem } from './result-item/picker-search-result-item.extension.js'; -import { customElement, html, nothing, repeat, state } from '@umbraco-cms/backoffice/external/lit'; +import { customElement, html, nothing, property, repeat, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { UmbSearchRequestArgs } from '@umbraco-cms/backoffice/search'; import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity'; +type PickableFilterMethodType = (item: T) => boolean; + @customElement('umb-picker-search-result') export class UmbPickerSearchResultElement extends UmbLitElement { @state() @@ -20,6 +22,9 @@ export class UmbPickerSearchResultElement extends UmbLitElement { @state() _isSearchable: boolean = false; + @property({ attribute: false }) + pickableFilter: PickableFilterMethodType = () => true; + #pickerContext?: UmbPickerContext; constructor() { @@ -30,10 +35,15 @@ export class UmbPickerSearchResultElement extends UmbLitElement { this.observe( this.#pickerContext?.search.searchable, (isSearchable) => (this._isSearchable = isSearchable ?? false), + 'obsSearchable', ); - this.observe(this.#pickerContext?.search.query, (query) => (this._query = query)); - this.observe(this.#pickerContext?.search.searching, (query) => (this._searching = query ?? false)); - this.observe(this.#pickerContext?.search.resultItems, (items) => (this._items = items ?? [])); + this.observe(this.#pickerContext?.search.query, (query) => (this._query = query), 'obsQuery'); + this.observe( + this.#pickerContext?.search.searching, + (query) => (this._searching = query ?? false), + 'obsSearching', + ); + this.observe(this.#pickerContext?.search.resultItems, (items) => (this._items = items ?? []), 'obsResultItems'); }); } @@ -58,11 +68,15 @@ export class UmbPickerSearchResultElement extends UmbLitElement { } #renderResultItem(item: UmbEntityModel) { + console.log('pickableFilter', this.pickableFilter(item)); return html` manifest.forEntityTypes.includes(item.entityType)} - .elementProps=${{ item }}> + .elementProps=${{ + item, + disabled: !this.pickableFilter(item), + }}> `; } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/picker/search/result-item/default/default-picker-search-result-item.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/picker/search/result-item/default/default-picker-search-result-item.element.ts index f886f47986..a936ff88d7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/picker/search/result-item/default/default-picker-search-result-item.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/picker/search/result-item/default/default-picker-search-result-item.element.ts @@ -13,8 +13,9 @@ export class UmbDefaultPickerSearchResultItemElement extends UmbPickerSearchResu id=${item.unique} icon=${item.icon ?? 'icon-document'} select-only - selectable + ?selectable=${!this.disabled} ?selected=${this._isSelected} + ?disabled=${this.disabled} @deselected=${() => this.pickerContext?.selection.deselect(item.unique)} @selected=${() => this.pickerContext?.selection.select(item.unique)}> diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/picker/search/result-item/picker-search-result-item-element-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/picker/search/result-item/picker-search-result-item-element-base.ts index c0c429aec1..07969e0aa0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/picker/search/result-item/picker-search-result-item-element-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/picker/search/result-item/picker-search-result-item-element-base.ts @@ -18,6 +18,9 @@ export abstract class UmbPickerSearchResultItemElementBase this.pickerContext?.selection.deselect(item.unique)} @selected=${() => this.pickerContext?.selection.select(item.unique)}> diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-picker-modal/tree-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-picker-modal/tree-picker-modal.element.ts index bb1fe200de..b2e6c66084 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-picker-modal/tree-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-picker-modal/tree-picker-modal.element.ts @@ -159,7 +159,7 @@ export class UmbTreePickerModalElement - + `; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-editor/workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-editor/workspace-editor.element.ts index ae686a5243..6c16b3aac4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-editor/workspace-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-editor/workspace-editor.element.ts @@ -90,9 +90,8 @@ export class UmbWorkspaceEditorElement extends UmbLitElement { ${this.#renderBackButton()} - ${this.#renderViews()} - ${this.#renderRoutes()} + ${this.#renderViews()} ${this.#renderRoutes()} ${when( !this.enforceNoFooter, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-entity-action-menu/workspace-entity-action-menu.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-entity-action-menu/workspace-entity-action-menu.element.ts index b1f5f733a2..eb38a8fa53 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-entity-action-menu/workspace-entity-action-menu.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-entity-action-menu/workspace-entity-action-menu.element.ts @@ -56,10 +56,10 @@ export class UmbWorkspaceEntityActionMenuElement extends UmbLitElement { ? html` - ${this.localize.term('general_actions')} - + uui-button { height: 100%; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/picker/document-type-picker-search-result-item.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/picker/document-type-picker-search-result-item.element.ts index f97639eb2a..44864c8b3b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/picker/document-type-picker-search-result-item.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/picker/document-type-picker-search-result-item.element.ts @@ -13,8 +13,9 @@ export class UmbDocumentTypePickerSearchResultItemElement extends UmbPickerSearc id=${item.unique} icon=${item.icon ?? 'icon-document'} select-only - selectable + ?selectable=${!this.disabled} ?selected=${this._isSelected} + ?disabled=${this.disabled} @deselected=${() => this.pickerContext?.selection.deselect(item.unique)} @selected=${() => this.pickerContext?.selection.select(item.unique)}> ${when( diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/picker/document-picker-search-result-item.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/picker/document-picker-search-result-item.element.ts index 8086682f33..52d0090b3e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/picker/document-picker-search-result-item.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/picker/document-picker-search-result-item.element.ts @@ -13,8 +13,9 @@ export class UmbDocumentPickerSearchResultItemElement extends UmbPickerSearchRes id=${item.unique} icon=${item.documentType.icon ?? 'icon-document'} select-only - selectable + ?selectable=${!this.disabled} ?selected=${this._isSelected} + ?disabled=${this.disabled} @deselected=${() => this.pickerContext?.selection.deselect(item.unique)} @selected=${() => this.pickerContext?.selection.select(item.unique)}> diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/picker/member-picker-search-result-item.element.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/picker/member-picker-search-result-item.element.ts index 2e73f8d596..e9e9641c8c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/picker/member-picker-search-result-item.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/picker/member-picker-search-result-item.element.ts @@ -13,8 +13,9 @@ export class UmbMemberPickerSearchResultItemElement extends UmbPickerSearchResul id=${item.unique} icon=${item.memberType.icon ?? 'icon-user'} select-only - selectable + ?selectable=${!this.disabled} ?selected=${this._isSelected} + ?disabled=${this.disabled} @deselected=${() => this.pickerContext?.selection.deselect(item.unique)} @selected=${() => this.pickerContext?.selection.select(item.unique)}> diff --git a/src/Umbraco.Web.UI.Client/src/packages/webhook/webhook/workspace/webhook-workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/webhook/webhook/workspace/webhook-workspace-editor.element.ts index bc43bceb77..c5cef0767e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/webhook/webhook/workspace/webhook-workspace-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/webhook/webhook/workspace/webhook-workspace-editor.element.ts @@ -74,10 +74,12 @@ export class UmbWebhookWorkspaceEditorElement extends UmbLitElement { #name { width: 100%; + z-index: 1; } #description { width: 100%; + margin-top: -1px; --uui-input-height: var(--uui-size-8); --uui-input-border-color: transparent; } diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj index bcdebc8667..cbbb790530 100644 --- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj +++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj @@ -1,4 +1,4 @@ - + Umbraco.Cms.Web.UI false @@ -24,6 +24,11 @@ + + + + + diff --git a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json index c7b5ad74cc..05e729b5ca 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json @@ -8,7 +8,7 @@ "hasInstallScript": true, "dependencies": { "@umbraco/json-models-builders": "^2.0.33", - "@umbraco/playwright-testhelpers": "^16.0.8", + "@umbraco/playwright-testhelpers": "^16.0.9", "camelize": "^1.0.0", "dotenv": "^16.3.1", "node-fetch": "^2.6.7" @@ -66,10 +66,9 @@ } }, "node_modules/@umbraco/playwright-testhelpers": { - "version": "16.0.8", - "resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-16.0.8.tgz", - "integrity": "sha512-7uSrljmpNXzVl1okX7aW3s1Btynbshx49GY3U5vBrmwUqFBOnHVQI7yZYFe5DViGI8EM1jCAq9UdRKqrM3SyHg==", - "license": "MIT", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-16.0.9.tgz", + "integrity": "sha512-nfoRZNYrD2PP6k/GljiINCEA8VM6uvOAlqmkhYOdiTzrgLmVRqZExsNskm1BhlcxDhE6+XZlpjTcFIotFBKLFQ==", "dependencies": { "@umbraco/json-models-builders": "2.0.33", "node-fetch": "^2.6.7" diff --git a/tests/Umbraco.Tests.AcceptanceTest/package.json b/tests/Umbraco.Tests.AcceptanceTest/package.json index b691bc4144..585fe02588 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package.json @@ -21,7 +21,7 @@ }, "dependencies": { "@umbraco/json-models-builders": "^2.0.33", - "@umbraco/playwright-testhelpers": "^16.0.8", + "@umbraco/playwright-testhelpers": "^16.0.9", "camelize": "^1.0.0", "dotenv": "^16.3.1", "node-fetch": "^2.6.7" diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Members/MemberGroups.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Members/MemberGroups.spec.ts index ad603889fc..54618fa4a7 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Members/MemberGroups.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Members/MemberGroups.spec.ts @@ -58,7 +58,7 @@ test('can delete a member group', {tag: '@smoke'}, async ({umbracoApi, umbracoUi // Act await umbracoUi.memberGroup.clickMemberGroupLinkByName(memberGroupName); - await umbracoUi.memberGroup.clickActionsButton(); + await umbracoUi.memberGroup.clickActionButton(); await umbracoUi.memberGroup.clickDeleteButton(); await umbracoUi.memberGroup.clickConfirmToDeleteButton(); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Members/Members.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Members/Members.spec.ts index d8d9540b2e..a36e52b530 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Members/Members.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Members/Members.spec.ts @@ -217,7 +217,7 @@ test('can delete member', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => { // Act await umbracoUi.member.clickMemberLinkByName(memberName); - await umbracoUi.memberGroup.clickActionsButton(); + await umbracoUi.memberGroup.clickActionButton(); await umbracoUi.memberGroup.clickDeleteButton(); await umbracoUi.memberGroup.clickConfirmToDeleteButton(); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Users/UserGroups.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Users/UserGroups.spec.ts index a2ac69290f..3f554a32ab 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Users/UserGroups.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Users/UserGroups.spec.ts @@ -115,7 +115,7 @@ test('can delete a user group', async ({umbracoApi, umbracoUi}) => { await umbracoUi.userGroup.clickUserGroupWithName(userGroupName); // Act - await umbracoUi.userGroup.clickActionsButton(); + await umbracoUi.userGroup.clickActionButton(); await umbracoUi.userGroup.clickDeleteButton(); await umbracoUi.userGroup.clickConfirmToDeleteButton(); diff --git a/version.json b/version.json index 79d4288a12..88a6be4a03 100644 --- a/version.json +++ b/version.json @@ -1,6 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/main/src/NerdBank.GitVersioning/version.schema.json", - "version": "16.0.0-rc", + "version": "16.0.0-rc2", "assemblyVersion": { "precision": "build" },