Skip to content

fix(GlDisclosureDropdown): Improve markup semantics of dropdown wrapper

What does this MR do?

  • Update computed disclosureOptions object to disclosureTag string
  • Removed <div role="group"> wrapper from story
  • Removed GlModal usage from story
  • Removed isAllItems and isAllGroup utils
  • Added isListItem, isValidSlotTag, and isSlotListItem utils

disclosureTag computed value is <ul> when:

Has items array

<gl-disclosure-dropdown :items="[...]">

All slot content are valid list items

<gl-disclosure-dropdown>
  <gl-disclosure-dropdown-group>...</gl-disclosure-dropdown-group>
  <gl-disclosure-dropdown-item>...</gl-disclosure-dropdown-item>
  <li>...</li>
</gl-disclosure-dropdown>

disclosureTag computed value is <div> when:

Text content

<gl-disclosure-dropdown>
  ...
</gl-disclosure-dropdown>

Slot content is not list item

<gl-disclosure-dropdown>
  <div>...</div>
</gl-disclosure-dropdown>

Any slot content is not a valid list item

<gl-disclosure-dropdown>
  <gl-disclosure-dropdown-group>...</gl-disclosure-dropdown-group>
  <gl-disclosure-dropdown-item>...</gl-disclosure-dropdown-item>
  <li>...</li>
  <div>...</div>
</gl-disclosure-dropdown>

Markup

Before

<ul id="disclosure-6" aria-labelledby="dropdown-toggle-btn-2" data-testid="disclosure-content" tabindex="-1" class="gl-new-dropdown-contents">
  <div>
    <ul role="group" class="gl-mb-0 gl-pl-0 gl-list-style-none">...</ul>
  </div>
  <div class="gl-border-t gl-pt-2 gl-mt-2">
    <ul role="group" class="gl-mb-0 gl-pl-0 gl-list-style-none">...</ul>
  </div>
  <div class="gl-border-t gl-pt-2 gl-mt-2">
    <ul role="group" class="gl-mb-0 gl-pl-0 gl-list-style-none">...</ul>
  </div>
</ul>

After

<ul id="disclosure-6" aria-labelledby="dropdown-toggle-btn-2" data-testid="disclosure-content" tabindex="-1" class="gl-new-dropdown-contents">
  <li>
    <ul role="group" class="gl-mb-0 gl-pl-0 gl-list-style-none">...</ul>
  </li>
  <li class="gl-border-t gl-pt-2 gl-mt-2">
    <ul role="group" class="gl-mb-0 gl-pl-0 gl-list-style-none">...</ul>
  </li>
  <li class="gl-border-t gl-pt-2 gl-mt-2">
    <ul role="group" class="gl-mb-0 gl-pl-0 gl-list-style-none">...</ul>
  </li>
</ul>

Does this MR meet the acceptance criteria?

Conformity

  • Code review guidelines.
  • GitLab UI's contributing guidlines.
  • If it changes a Pajamas-compliant component's look & feel, the MR has been reviewed by a UX designer.
  • If it changes GitLab UI's documentation guidelines, the MR has been reviewed by a Technical Writer.
  • If the MR changes a component's API, integration MR(s) have been opened in the following projects to ensure that the @gitlab/ui package can be upgraded quickly after the changes are released:
  • Added the ~"component:*" label(s) if applicable.

Security

If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:

  • Label as security and @ mention @gitlab-com/gl-security/appsec
  • Security reports checked/validated by a reviewer from the AppSec team

Accessibility

If this MR adds or modifies a component, take a few moments to review the following:

  • All actions and functionality can be done with a keyboard.
  • Links, buttons, and controls have a visible focus state.
  • All content is presented in text or with a text equivalent. For example, alt text for SVG, or aria-label for icons that have meaning or perform actions.
  • Changes in a component’s state are announced by a screen reader. For example, changing aria-expanded="false" to aria-expanded="true" when an accordion is expanded.
  • Color combinations have sufficient contrast.

Closes #2152 (closed)

Edited by Scott de Jonge

Merge request reports