diff --git a/app/assets/stylesheets/inputs.css b/app/assets/stylesheets/inputs.css index ecd175e10..1a9afd70a 100644 --- a/app/assets/stylesheets/inputs.css +++ b/app/assets/stylesheets/inputs.css @@ -65,7 +65,7 @@ &:focus-visible { .input--file:has(&) { outline: 0.15rem solid var(--color-selected-dark); - } + } } } @@ -177,12 +177,6 @@ } } - .switch__input:disabled + & { - --switch-color: var(--color-ink-medium) !important; - - cursor: not-allowed; - } - .switch__input:checked + & { --switch-color: var(--color-link); @@ -190,6 +184,13 @@ transform: translateX(1.2em); } } + + .switch__input:disabled + & { + --switch-color: var(--color-ink-medium); + + cursor: not-allowed; + opacity: 0.5; + } } /* Containers that act like (and contain) inputs */ diff --git a/app/assets/stylesheets/settings.css b/app/assets/stylesheets/settings.css index 03986bc45..9baa51b14 100644 --- a/app/assets/stylesheets/settings.css +++ b/app/assets/stylesheets/settings.css @@ -1,6 +1,7 @@ @layer components { .settings { --settings-spacer: var(--block-space); + --settings-item-padding-inline: 0.5ch; display: grid; gap: calc(var(--settings-spacer) * 2); @@ -55,14 +56,21 @@ .settings__user-list { flex: 1 1 auto; - inline-size: 100%; list-style: none; - margin: calc(var(--settings-spacer) / -4) 0; + margin: calc(var(--settings-spacer) / -4) calc(-1 * var(--settings-item-padding-inline)); padding: 0; overflow: auto; + li { + border-radius: 0.5em; + + /* Add padding if it's not already on a link within */ + &:not(:has(a:first-child)) { padding-inline-end: var(--settings-item-padding-inline); } + &:not(:has(a:last-child)) { padding-inline-end: var(--settings-item-padding-inline); } + } + a { - padding-block: calc(var(--settings-spacer) / 4); + padding: calc(var(--settings-spacer) / 4) var(--settings-item-padding-inline); @media(any-hover: hover) { &:hover { @@ -70,5 +78,24 @@ } } } + + /* Only add a BG color when you can actually navigate */ + .settings__user-filter:focus-within & { + [aria-selected] { + background: var(--color-selected); + } + } + } + + .settings__user-list-tips { + border-top: 1px solid var(--color-ink-light); + color: var(--color-ink-dark); + font-size: var(--text-small); + padding-block-start: var(--settings-spacer); + + .settings__user-filter--bg & { + margin-inline: calc(-1 * var(--settings-spacer)); + padding-inline: var(--settings-spacer); + } } } diff --git a/app/helpers/accesses_helper.rb b/app/helpers/accesses_helper.rb index ec2ba6722..5eb39466c 100644 --- a/app/helpers/accesses_helper.rb +++ b/app/helpers/accesses_helper.rb @@ -1,7 +1,10 @@ module AccessesHelper def access_menu_tag(collection, **options, &) tag.menu class: [ options[:class], { "toggler--toggled": collection.all_access? } ], data: { - controller: "filter toggle-class", + controller: "filter toggle-class navigable-list", + action: "keydown->navigable-list#navigate filter:changed->navigable-list#reset", + navigable_list_focus_on_selection_value: true, + navigable_list_actionable_items_value: true, toggle_class_toggle_class: "toggler--toggled" }, & end diff --git a/app/helpers/avatars_helper.rb b/app/helpers/avatars_helper.rb index 99cd57efa..f3b9e5e2f 100644 --- a/app/helpers/avatars_helper.rb +++ b/app/helpers/avatars_helper.rb @@ -20,7 +20,7 @@ module AvatarsHelper end def avatar_preview_tag(user, hidden_for_screen_reader: false, **options) - tag.span class: "avatar", + tag.span class: class_names("avatar", options.delete(:class)), aria: { hidden: hidden_for_screen_reader, label: user.name }, tabindex: hidden_for_screen_reader ? -1 : nil do avatar_image_tag(user, **options) diff --git a/app/javascript/controllers/navigable_list_controller.js b/app/javascript/controllers/navigable_list_controller.js index 580dafc6c..533c3bb89 100644 --- a/app/javascript/controllers/navigable_list_controller.js +++ b/app/javascript/controllers/navigable_list_controller.js @@ -106,9 +106,13 @@ export default class extends Controller { #toggleCurrentItem(event) { if (this.actionableItemsValue && this.currentItem && this.#visibleItems.length) { const toggleable = this.currentItem.querySelector("input[type=checkbox]") + const isDisabled = toggleable.hasAttribute("disabled") + if (toggleable) { - toggleable.checked = !toggleable.checked - toggleable.dispatchEvent(new Event('change', { bubbles: true })) + if (!isDisabled) { + toggleable.checked = !toggleable.checked + toggleable.dispatchEvent(new Event('change', { bubbles: true })) + } event.preventDefault() } } diff --git a/app/views/accounts/_user.html.erb b/app/views/accounts/_user.html.erb index 32e0c66ed..add56b38f 100644 --- a/app/views/accounts/_user.html.erb +++ b/app/views/accounts/_user.html.erb @@ -1,4 +1,4 @@ -
  • +
  • <%= link_to user, class: "txt-ink flex gap-half align-center min-width" do %> <%= avatar_preview_tag user, hidden_for_screen_reader: true %> <%= user.name %> diff --git a/app/views/accounts/settings/_users.html.erb b/app/views/accounts/settings/_users.html.erb index 8f3c8594f..6c834f0e6 100644 --- a/app/views/accounts/settings/_users.html.erb +++ b/app/views/accounts/settings/_users.html.erb @@ -1,4 +1,9 @@ -
    +<%= tag.div class: "settings__panel settings__panel--users panel shadow center", data: { + controller: "filter navigable-list", + action: "keydown->navigable-list#navigate filter:changed->navigable-list#reset", + navigable_list_focus_on_selection_value: true, + navigable_list_actionable_items_value: true +} do %>

    People on the account

    <%#= render "accounts/invite" # Scheduled work in https://3.basecamp.com/2914079/buckets/37331921/todos/8746162337 %> @@ -8,5 +13,9 @@ + +
    + Press to move, enter to visit profile, SHIFT+ENTER to toggle. +
    - +<% end %> diff --git a/app/views/cards/display/_preview.html.erb b/app/views/cards/display/_preview.html.erb index 1a4977cdb..414096318 100644 --- a/app/views/cards/display/_preview.html.erb +++ b/app/views/cards/display/_preview.html.erb @@ -21,13 +21,9 @@

    <%= card.title %>

    - - <%= link_to collection_card_path(card.collection, card), draggable: false, class: "card__link", title: card_title_tag(card), data: { action: "dialog#close", turbo_frame: "_top" } do %> - <%= card.title %> - <% end %> - <%= render "cards/stagings/stages", card: card if card.doing? %> + <%= render "cards/display/preview/stages", card: card if card.doing? %> @@ -36,6 +32,10 @@ <%= render "cards/display/common/background", card: card %> + <%= link_to collection_card_path(card.collection, card), draggable: false, class: "card__link", title: card_title_tag(card), data: { action: "dialog#close", turbo_frame: "_top" } do %> + <%= card.title %> + <% end %> + <% if card.entropic? %> <%= render "cards/display/preview/bubble", card: card %> <% end %> diff --git a/app/views/cards/display/common/_assignees.html.erb b/app/views/cards/display/common/_assignees.html.erb index 9dc9264ab..895b29bd9 100644 --- a/app/views/cards/display/common/_assignees.html.erb +++ b/app/views/cards/display/common/_assignees.html.erb @@ -1,6 +1,6 @@
    <% card.assignees.each do |assignee| %> - <%= avatar_tag assignee %> + <%= avatar_tag assignee, tabindex: (local_assigns.key?(:preview) && local_assigns[:preview]) ? -1 : 0 %> <% end %>
    > diff --git a/app/views/cards/display/common/_meta.html.erb b/app/views/cards/display/common/_meta.html.erb index 8d03eba4a..f2d64c8fc 100644 --- a/app/views/cards/display/common/_meta.html.erb +++ b/app/views/cards/display/common/_meta.html.erb @@ -1,7 +1,7 @@
    - <%= avatar_tag card.creator, class: "card__meta-author" %> + <%= avatar_tag card.creator, class: "card__meta-author", tabindex: (local_assigns.key?(:preview) && local_assigns[:preview]) ? -1 : 0 %> Added <%= local_datetime_tag(card.created_at, style: :daysago) %> diff --git a/app/views/cards/display/preview/_assignees.html.erb b/app/views/cards/display/preview/_assignees.html.erb index 3a4655224..523d1ca47 100644 --- a/app/views/cards/display/preview/_assignees.html.erb +++ b/app/views/cards/display/preview/_assignees.html.erb @@ -1 +1 @@ -<%= render "cards/display/common/assignees", card: card %> +<%= render "cards/display/common/assignees", card: card, preview: true %> diff --git a/app/views/cards/display/preview/_meta.html.erb b/app/views/cards/display/preview/_meta.html.erb index 0b25c23f6..8d9940fa2 100644 --- a/app/views/cards/display/preview/_meta.html.erb +++ b/app/views/cards/display/preview/_meta.html.erb @@ -1,3 +1,3 @@ -<%= render "cards/display/common/meta", card: card do %> +<%= render "cards/display/common/meta", card: card, preview: true do %> <%= render "cards/display/preview/assignees", card: card %> <% end %> diff --git a/app/views/cards/display/preview/_people.html.erb b/app/views/cards/display/preview/_people.html.erb index 08319d327..294039f71 100644 --- a/app/views/cards/display/preview/_people.html.erb +++ b/app/views/cards/display/preview/_people.html.erb @@ -1,3 +1,3 @@ <%= render "cards/display/common/people", card: card do%> - <%= render "cards/display/preview/assignees", card: card %> + <%= render "cards/display/preview/assignees", card: card, preview: true %> <% end %> diff --git a/app/views/collections/_access_toggle.erb b/app/views/collections/_access_toggle.erb index 12a7eda80..579cb4fc1 100644 --- a/app/views/collections/_access_toggle.erb +++ b/app/views/collections/_access_toggle.erb @@ -1,5 +1,4 @@ -
  • - +
  • <%= link_to user, class: "txt-ink flex gap-half align-center min-width" do %> <%= avatar_preview_tag user, hidden_for_screen_reader: true %> <%= user.name %> diff --git a/app/views/collections/edit/_users.html.erb b/app/views/collections/edit/_users.html.erb index e850faac7..884bfc9fe 100644 --- a/app/views/collections/edit/_users.html.erb +++ b/app/views/collections/edit/_users.html.erb @@ -24,4 +24,8 @@ <%= access_toggles_for selected_users, selected: true %> <%= access_toggles_for unselected_users, selected: false %> + + <% end %>