fix(GlDisclosureDropdown): Improve markup semantics of dropdown wrapper
What does this MR do?
- Update computed
disclosureOptions
object todisclosureTag
string - Removed
<div role="group">
wrapper from story - Removed
GlModal
usage from story - Removed
isAllItems
andisAllGroup
utils - Added
isListItem
,isValidSlotTag
, andisSlotListItem
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:-
GitLab: mr_url -
CustomersDot: mr_url -
Status Page: mr_url
-
-
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"
toaria-expanded="true"
when an accordion is expanded. -
Color combinations have sufficient contrast.
Closes #2152 (closed)
Edited by Scott de Jonge