diff --git a/src/OverflowMenu/OverflowMenu.svelte b/src/OverflowMenu/OverflowMenu.svelte index 6d76eef6..e4fbf7db 100644 --- a/src/OverflowMenu/OverflowMenu.svelte +++ b/src/OverflowMenu/OverflowMenu.svelte @@ -80,20 +80,19 @@ setContext("OverflowMenu", { focusedId, - add: ({ id, text, primaryFocus }) => { + add: ({ id, text, primaryFocus, disabled }) => { items.update((_) => { if (primaryFocus) { currentIndex.set(_.length); } - return [..._, { id, text, primaryFocus, index: _.length }]; + return [..._, { id, text, primaryFocus, disabled, index: _.length }]; }); }, update: (id) => { currentId.set(id); }, change: (direction) => { - // TODO: skip disabled let index = $currentIndex + direction; if (index < 0) { @@ -102,6 +101,20 @@ index = 0; } + let disabled = $items[index].disabled; + + while (disabled) { + index = index + direction; + + if (index < 0) { + index = $items.length - 1; + } else if (index >= $items.length) { + index = 0; + } + + disabled = $items[index].disabled; + } + currentIndex.set(index); }, }); diff --git a/src/OverflowMenu/OverflowMenuItem.svelte b/src/OverflowMenu/OverflowMenuItem.svelte index de4e1386..813fac70 100644 --- a/src/OverflowMenu/OverflowMenuItem.svelte +++ b/src/OverflowMenu/OverflowMenuItem.svelte @@ -33,7 +33,7 @@ const { focusedId, add, update, change } = getContext("OverflowMenu"); - add({ id, text, primaryFocus }); + add({ id, text, primaryFocus, disabled }); afterUpdate(() => { if (ref && primaryFocus) {