From da171de165a3e45afb3000538a85f06b0bea81c1 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 11 Jun 2025 16:29:38 +0100 Subject: [PATCH 1/6] Adds optional parameter to Tiptap toolbar item's `isActive` --- .../src/packages/tiptap/extensions/types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/tiptap/extensions/types.ts b/src/Umbraco.Web.UI.Client/src/packages/tiptap/extensions/types.ts index 7b2f40033cb5..68d57116931a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/tiptap/extensions/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/tiptap/extensions/types.ts @@ -54,7 +54,7 @@ export interface UmbTiptapToolbarElementApi extends UmbApi, UmbTiptapExtensionAr /** * Checks if the toolbar element is active. */ - isActive(editor?: Editor): boolean; + isActive(editor?: Editor, ...args: Array): boolean; /** * Checks if the toolbar element is disabled. From d6dc4b3c2222497f1ee14a706021bbed507f6fa5 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Wed, 11 Jun 2025 16:36:27 +0100 Subject: [PATCH 2/6] Adds `isActive` support to toolbar menus and cascading menus --- .../cascading-menu-popover.element.ts | 8 ++++++++ .../toolbar/tiptap-toolbar-menu.element.ts | 15 ++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/tiptap/components/cascading-menu-popover/cascading-menu-popover.element.ts b/src/Umbraco.Web.UI.Client/src/packages/tiptap/components/cascading-menu-popover/cascading-menu-popover.element.ts index 047b6c05891c..2e7d79839af4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/tiptap/components/cascading-menu-popover/cascading-menu-popover.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/tiptap/components/cascading-menu-popover/cascading-menu-popover.element.ts @@ -9,6 +9,7 @@ export type UmbCascadingMenuItem = { element?: HTMLElement; separatorAfter?: boolean; style?: string; + isActive?: () => boolean | undefined; execute?: () => void; }; @@ -21,6 +22,10 @@ export class UmbCascadingMenuPopoverElement extends UmbElementMixin(UUIPopoverCo return this.shadowRoot?.querySelector(`#${popoverId}`) as UUIPopoverContainerElement; } + #isMenuActive(items?: UmbCascadingMenuItem[]): boolean { + return !!items?.some((item) => item.isActive?.() || this.#isMenuActive(item.items)); + } + #onMouseEnter(item: UmbCascadingMenuItem, popoverId: string) { if (!item.items?.length) return; @@ -72,6 +77,7 @@ export class UmbCascadingMenuPopoverElement extends UmbElementMixin(UUIPopoverCo } const label = this.localize.string(item.label); + const isActive = item.isActive?.() || this.#isMenuActive(item.items) || false; return html`
this.#onClick(item, popoverId)}> ${when(item.icon, (icon) => html``)} `; }