From 13a4598ddef7a0fc09975a2a8b64cd19e6103d46 Mon Sep 17 00:00:00 2001 From: Ben Basten <45583362+ben-basten@users.noreply.github.com> Date: Tue, 11 Jun 2024 06:57:05 -0400 Subject: [PATCH] fix: refining the little details - adjust the aria attributes - intuitive escape key propagation - extract context into its own file --- web/src/lib/actions/list-navigation.ts | 9 +++++++ .../context-menu/button-context-menu.svelte | 27 ++++++++++--------- .../context-menu/context-menu.svelte | 2 +- .../context-menu/menu-option.svelte | 2 +- .../context-menu/menu.context.ts | 5 ++++ .../shared-components/context-menu/menu.ts | 3 --- .../right-click-context-menu.svelte | 26 +++++++++++++++--- 7 files changed, 54 insertions(+), 20 deletions(-) create mode 100644 web/src/lib/components/shared-components/context-menu/menu.context.ts delete mode 100644 web/src/lib/components/shared-components/context-menu/menu.ts diff --git a/web/src/lib/actions/list-navigation.ts b/web/src/lib/actions/list-navigation.ts index f27e18e64cb54c..0db3116960ab30 100644 --- a/web/src/lib/actions/list-navigation.ts +++ b/web/src/lib/actions/list-navigation.ts @@ -27,6 +27,10 @@ interface Options { * A function that is called when the dropdown should be closed. */ closeDropdown: () => void; + /** + * Override the default behavior for the escape key. + */ + onEscape?: (event: KeyboardEvent) => void; } export const listNavigation: Action = (node, options: Options) => { @@ -80,6 +84,11 @@ export const listNavigation: Action = (node, options: Opti }; const onEscape = (event: KeyboardEvent) => { + const { onEscape } = options; + if (onEscape) { + onEscape(event); + return; + } event.stopPropagation(); close(); }; diff --git a/web/src/lib/components/shared-components/context-menu/button-context-menu.svelte b/web/src/lib/components/shared-components/context-menu/button-context-menu.svelte index 59ac58be9c115f..cdda8ca1c3d8ca 100644 --- a/web/src/lib/components/shared-components/context-menu/button-context-menu.svelte +++ b/web/src/lib/components/shared-components/context-menu/button-context-menu.svelte @@ -1,18 +1,12 @@ - -
import Icon from '$lib/components/elements/icon.svelte'; import { generateId } from '$lib/utils/generate-id'; - import { getMenuContext } from '$lib/components/shared-components/context-menu/button-context-menu.svelte'; + import { getMenuContext } from '$lib/components/shared-components/context-menu/menu.context'; import { createEventDispatcher } from 'svelte'; export let text = ''; diff --git a/web/src/lib/components/shared-components/context-menu/menu.context.ts b/web/src/lib/components/shared-components/context-menu/menu.context.ts new file mode 100644 index 00000000000000..e9c1436631a687 --- /dev/null +++ b/web/src/lib/components/shared-components/context-menu/menu.context.ts @@ -0,0 +1,5 @@ +import { createContext } from '$lib/utils/context'; + +const { get: getMenuContext, set: setMenuContext } = createContext<() => void>(); + +export { getMenuContext, setMenuContext }; diff --git a/web/src/lib/components/shared-components/context-menu/menu.ts b/web/src/lib/components/shared-components/context-menu/menu.ts deleted file mode 100644 index 108b2fd1aadd61..00000000000000 --- a/web/src/lib/components/shared-components/context-menu/menu.ts +++ /dev/null @@ -1,3 +0,0 @@ -const key = {}; - -export { key }; diff --git a/web/src/lib/components/shared-components/context-menu/right-click-context-menu.svelte b/web/src/lib/components/shared-components/context-menu/right-click-context-menu.svelte index 5be0f77622c820..35818e8b6a9e4c 100644 --- a/web/src/lib/components/shared-components/context-menu/right-click-context-menu.svelte +++ b/web/src/lib/components/shared-components/context-menu/right-click-context-menu.svelte @@ -1,8 +1,10 @@ {#key uniqueKey} {#if isOpen}