diff --git a/src/UIShell/GlobalHeader/HeaderNavItem.svelte b/src/UIShell/GlobalHeader/HeaderNavItem.svelte
index d8219efc..60376fcf 100644
--- a/src/UIShell/GlobalHeader/HeaderNavItem.svelte
+++ b/src/UIShell/GlobalHeader/HeaderNavItem.svelte
@@ -20,9 +20,10 @@
import { getContext } from "svelte";
const id = "ccs-" + Math.random().toString(36);
- const ctx = getContext("HeaderNavMenu");
+ const { selectedItems, updateSelectedItems, closeMenu } =
+ getContext("HeaderNavMenu");
- $: if (ctx) ctx.updateSelectedItems({ id, isSelected });
+ $: updateSelectedItems({ id, isSelected });
@@ -43,6 +44,10 @@
on:keydown
on:focus
on:blur
+ on:blur="{() => {
+ const ids = Object.keys($selectedItems);
+ if (ids.indexOf(id) === ids.length - 1) closeMenu();
+ }}"
>
{text}
diff --git a/src/UIShell/GlobalHeader/HeaderNavMenu.svelte b/src/UIShell/GlobalHeader/HeaderNavMenu.svelte
index 78c94858..67e1f9b2 100644
--- a/src/UIShell/GlobalHeader/HeaderNavMenu.svelte
+++ b/src/UIShell/GlobalHeader/HeaderNavMenu.svelte
@@ -14,19 +14,29 @@
/** Obtain a reference to the HTML anchor element */
export let ref = null;
+ export function toggle() {
+ expanded = !expanded;
+ }
+
import { setContext } from "svelte";
import { writable } from "svelte/store";
import ChevronDown16 from "../../icons/ChevronDown16.svelte";
const selectedItems = writable({});
+ let menuRef = null;
+
setContext("HeaderNavMenu", {
+ selectedItems,
updateSelectedItems(item) {
selectedItems.update((_items) => ({
..._items,
[item.id]: item.isSelected,
}));
},
+ closeMenu() {
+ expanded = false;
+ },
});
$: isCurrentSubmenu =
@@ -34,13 +44,9 @@
{
+ if (!ref.contains(target)) {
+ expanded = false;
}
}}"
/>
@@ -48,10 +54,21 @@
{
+ if (e.key === 'Enter' || e.key === ' ') {
expanded = !expanded;
}
}}"
@@ -78,7 +95,12 @@
{text}
-