Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
2723896
feat(nav): collapsible sidebar nav
NriotHrreion Sep 9, 2026
e7b3786
Merge branch 'main' into feature/collapsible-nav-sidebar
NriotHrreion Sep 9, 2026
3858353
style(nav): improve collapsible sidebar nav style
NriotHrreion Sep 9, 2026
c9d97ee
refactor(nav): extract collapsible nav components
NriotHrreion Sep 9, 2026
a169f6c
Merge branch 'main' into feature/collapsible-nav-sidebar
NriotHrreion Sep 9, 2026
4f1e856
fix(nav): restore focus after programmatic mobile opens
NriotHrreion Sep 9, 2026
bd54418
fix(nav): align mobile selected indicator with page edge
NriotHrreion Sep 9, 2026
bd4066b
fix(nav): restore focus after controlled mobile closes
NriotHrreion Sep 9, 2026
74c5ef7
fix(nav): slide mobile drawer from correct edge in RTL
NriotHrreion Sep 9, 2026
2a90d95
fix(nav): honor disabled on internal collapsible toggles
NriotHrreion Sep 9, 2026
56ba07f
fix(nav): support synthesized clicks on flyout triggers
NriotHrreion Sep 9, 2026
1c71202
fix(nav): mirror internal toggle icons in RTL
NriotHrreion Sep 9, 2026
87ee2a1
fix(nav): preserve consumer-provided aria-hidden state
NriotHrreion Sep 9, 2026
b3050f8
fix(nav): improve mobile overlay focus isolation
NriotHrreion Sep 9, 2026
02ab49d
fix(nav): align mobile indicators in RTL
NriotHrreion Sep 9, 2026
ab2d309
Merge branch 'main' into feature/collapsible-nav-sidebar
NriotHrreion Sep 9, 2026
bc530a2
fix(nav): accept pen clicks on collapsed flyout triggers
NriotHrreion Sep 9, 2026
0c90949
fix(nav): preserve consumer-provided inert state
NriotHrreion Sep 10, 2026
a8c1fd6
fix(nav): exclude untabbable anchors from the focus trap
NriotHrreion Sep 10, 2026
12d7608
refactor(nav): use base ui dialog for mobile overlay
NriotHrreion Sep 10, 2026
9085069
fix(nav): render collapsible nav dialog only on mobile
NriotHrreion Sep 10, 2026
dfc88a5
fix(nav): prevent inactive mobile navigation exposure
NriotHrreion Sep 10, 2026
3712a88
fix(nav): stabilize merged button refs
NriotHrreion Sep 10, 2026
bb54c96
fix(nav): support legacy media query listeners
NriotHrreion Sep 10, 2026
85267f3
fix(nav): stabilize collapsible navigation refs
NriotHrreion Sep 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
130 changes: 130 additions & 0 deletions packages/styles/dist/gitlab-ui.css
Original file line number Diff line number Diff line change
Expand Up @@ -7365,6 +7365,136 @@
.gl-sub-nav-button.gl-nav-item-has-start-slot {
padding-left: var(--gl-spacing-scale-7);
}
.gl-collapsible-nav {
--gl-collapsible-nav-expanded-width: 15rem;
--gl-collapsible-nav-collapsed-width: 3.5rem;
flex-shrink: 0;
width: var(--gl-collapsible-nav-expanded-width);
transition: width 200ms ease, transform 200ms ease, visibility 0s;
}
.gl-collapsible-nav .gl-nav-item {
transition: width 200ms ease;
}
.gl-collapsible-nav > .gl-nav-list > .gl-nav-list-item > .gl-nav-item-has-start-slot {
padding-inline-start: var(--gl-spacing-scale-1);
}
.gl-collapsible-nav .gl-nav-item-label, .gl-collapsible-nav .gl-nav-item-addon, .gl-collapsible-nav .gl-nav-item-chevron {
transition: opacity 150ms ease-out, transform 150ms ease-out, max-width 150ms ease-out;
}
.gl-collapsible-nav .gl-nav-item-label {
min-width: 0;
max-width: calc(var(--gl-collapsible-nav-expanded-width) - 4rem);
overflow: hidden;
white-space: nowrap;
}
.gl-collapsible-nav .gl-nav-item-addon, .gl-collapsible-nav .gl-nav-item-chevron {
max-width: 1.5rem;
}
.gl-collapsible-nav-portal-host, .gl-collapsible-nav-portal, .gl-collapsible-nav-dialog {
display: contents;
}
.gl-collapsible-nav-toggle-icon:dir(rtl) {
transform: scaleX(-1);
}
.gl-collapsible-nav-backdrop {
position: fixed;
inset: 0;
z-index: 1029;
background-color: rgb(0 0 0 / 0.5);
opacity: 1;
transition: opacity 250ms ease-out;
}
.gl-collapsible-nav-backdrop[data-starting-style], .gl-collapsible-nav-backdrop[data-ending-style] {
opacity: 0;
}
.gl-collapsible-nav-flyout {
min-width: 12rem;
}
.gl-collapsible-nav-flyout.fade[data-ending-style] {
transition-duration: 0s;
}
.gl-collapsible-nav-flyout .gl-sub-nav {
margin-top: var(--gl-spacing-scale-0);
}
@media (min-width: 1200px) {
.gl-collapsible-nav[data-open="false"] {
width: var(--gl-collapsible-nav-collapsed-width);
}
.gl-collapsible-nav[data-open="false"] .gl-nav-item-is-icon-only {
gap: var(--gl-spacing-scale-0);
width: 1.75rem;
height: 1.75rem;
margin-inline-start: 0;
margin-inline-end: auto;
}
.gl-collapsible-nav[data-open="false"] .gl-nav-item-label, .gl-collapsible-nav[data-open="false"] .gl-nav-item-addon, .gl-collapsible-nav[data-open="false"] .gl-nav-item-chevron {
flex-grow: 0;
max-width: 0;
overflow: hidden;
opacity: 0;
transform: translateX(-0.25rem);
}
.gl-collapsible-nav[data-open="false"] .gl-nav-item-addon, .gl-collapsible-nav[data-open="false"] .gl-nav-item-chevron {
width: 0;
}
}
@media (max-width: 1199px) {
.gl-collapsible-nav[data-viewport-ready="false"] {
display: none;
}
.gl-collapsible-nav-dialog {
display: flex;
position: fixed;
inset-block: 0;
inset-inline-start: 0;
z-index: 1030;
width: max-content;
max-width: 100vw;
transform: translateX(0);
transition: transform 200ms ease;
}
.gl-collapsible-nav-dialog[data-closed], .gl-collapsible-nav-dialog[data-starting-style], .gl-collapsible-nav-dialog[data-ending-style] {
transform: translateX(-100%);
}
.gl-collapsible-nav-dialog:dir(rtl)[data-closed], .gl-collapsible-nav-dialog:dir(rtl)[data-starting-style], .gl-collapsible-nav-dialog:dir(rtl)[data-ending-style] {
transform: translateX(100%);
}
.gl-collapsible-nav {
background-color: var(--gl-background-color-overlap);
display: flex;
height: 100%;
flex-direction: column;
overflow-y: auto;
--tw-shadow: var(--gl-shadow-lg);
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
font-size: var(--gl-font-size-base);
--tw-leading: 1rem;
line-height: 1rem;
position: static;
width: var(--gl-collapsible-nav-expanded-width);
max-width: calc(100vw - 3rem);
border-start-end-radius: var(--gl-drawer-border-radius);
border-end-end-radius: var(--gl-drawer-border-radius);
}
.gl-collapsible-nav > .gl-nav-list {
flex-grow: 1;
padding: var(--gl-spacing-scale-5);
padding-inline-start: var(--gl-spacing-scale-3);
}
.gl-collapsible-nav:dir(rtl) .gl-nav-item-indicator-left.selected::before {
left: auto;
right: calc(var(--gl-spacing-scale-3) * -1);
border-top-left-radius: var(--gl-border-radius-default);
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: var(--gl-border-radius-default);
}
}
@media (prefers-reduced-motion: reduce) {
.gl-collapsible-nav, .gl-collapsible-nav .gl-nav-item, .gl-collapsible-nav .gl-nav-item-label, .gl-collapsible-nav .gl-nav-item-addon, .gl-collapsible-nav .gl-nav-item-chevron, .gl-collapsible-nav-dialog, .gl-collapsible-nav-backdrop {
transition-duration: 0s;
}
}
.gl-pagination {
font-size: var(--gl-font-size-base);
text-wrap: nowrap;
Expand Down
Loading