From 2566c1fac69f9e7e148ae967878d3abc7d655159 Mon Sep 17 00:00:00 2001 From: Keavon Chambers Date: Fri, 6 May 2022 14:24:16 -0700 Subject: [PATCH 01/16] Keyboard menu navigation --- frontend/src/App.vue | 21 +++++++++++++++++++ .../widgets/floating-menus/DialogModal.vue | 6 ++++++ .../widgets/floating-menus/MenuList.vue | 15 +++++++++---- .../widgets/inputs/CheckboxInput.vue | 4 +++- .../widgets/inputs/DropdownInput.vue | 13 ++++++++++-- .../components/widgets/inputs/FontInput.vue | 13 ++++++++++-- .../widgets/separators/Separator.vue | 2 ++ 7 files changed, 65 insertions(+), 9 deletions(-) diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 7c457fea40..75184b83be 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -186,6 +186,27 @@ img { } } +.icon-button, +.text-button, +.popover-button, +.checkbox-input label, +.color-input .swatch .swatch-button, +.dropdown-input .dropdown-box, +.font-input .dropdown-box, +.radio-input button, +.menu-list { + &:focus { + outline: 1px solid var(--color-accent); + outline-offset: 2px; + } +} + +.menu-list { + &:focus { + outline-offset: -1px; + } +} + // For placeholder messages (remove eventually) .floating-menu { h1, diff --git a/frontend/src/components/widgets/floating-menus/DialogModal.vue b/frontend/src/components/widgets/floating-menus/DialogModal.vue index 728f32c28a..789e6ec6a5 100644 --- a/frontend/src/components/widgets/floating-menus/DialogModal.vue +++ b/frontend/src/components/widgets/floating-menus/DialogModal.vue @@ -90,5 +90,11 @@ export default defineComponent({ this.dialog.dismissDialog(); }, }, + mounted() { + // Focus the first button in the popup + const element = this.$el as Element | null; + const emphasizedOrFirstButton = (element?.querySelector("button.emphasized") as HTMLButtonElement | null) || element?.querySelector("button"); + emphasizedOrFirstButton?.focus(); + }, }); diff --git a/frontend/src/components/widgets/floating-menus/MenuList.vue b/frontend/src/components/widgets/floating-menus/MenuList.vue index be67022aac..970569d4d4 100644 --- a/frontend/src/components/widgets/floating-menus/MenuList.vue +++ b/frontend/src/components/widgets/floating-menus/MenuList.vue @@ -2,7 +2,7 @@ @@ -42,6 +42,15 @@ padding: 4px 0; .row { + display: flex; + flex-direction: row; + flex-grow: 1; // TODO: Note, this is overridden by the flex shorthand rule below + min-width: 0; + min-height: 0; + border: 0; + padding: 0; + text-align: left; + background: none; height: 20px; align-items: center; white-space: nowrap; @@ -133,7 +142,6 @@ import { defineComponent, PropType } from "vue"; import { IconName } from "@/utilities/icons"; -import LayoutRow from "@/components/layout/LayoutRow.vue"; import FloatingMenu, { MenuDirection } from "@/components/widgets/floating-menus/FloatingMenu.vue"; import CheckboxInput from "@/components/widgets/inputs/CheckboxInput.vue"; import IconLabel from "@/components/widgets/labels/IconLabel.vue"; @@ -277,7 +285,6 @@ const MenuList = defineComponent({ IconLabel, CheckboxInput, UserInputLabel, - LayoutRow, }, }); export default MenuList; diff --git a/frontend/src/components/widgets/inputs/CheckboxInput.vue b/frontend/src/components/widgets/inputs/CheckboxInput.vue index 4b69003f9f..9851efdda5 100644 --- a/frontend/src/components/widgets/inputs/CheckboxInput.vue +++ b/frontend/src/components/widgets/inputs/CheckboxInput.vue @@ -1,7 +1,7 @@