diff --git a/packages/styles/dist/gitlab-ui.css b/packages/styles/dist/gitlab-ui.css index 80ed69e..bba7c31 100644 --- a/packages/styles/dist/gitlab-ui.css +++ b/packages/styles/dist/gitlab-ui.css @@ -7387,6 +7387,9 @@ overflow: hidden; white-space: nowrap; } + .gl-collapsible-nav .gl-nav-item-chevron-slot { + margin-inline-start: auto; + } .gl-collapsible-nav .gl-nav-item-addon, .gl-collapsible-nav .gl-nav-item-chevron { max-width: 1.5rem; } diff --git a/packages/ui/src/base/nav/nav.css b/packages/ui/src/base/nav/nav.css index 20c9077..78aa65c 100644 --- a/packages/ui/src/base/nav/nav.css +++ b/packages/ui/src/base/nav/nav.css @@ -204,6 +204,10 @@ white-space: nowrap; } + .gl-nav-item-chevron-slot { + margin-inline-start: auto; + } + .gl-nav-item-addon, .gl-nav-item-chevron { max-width: 1.5rem; diff --git a/packages/ui/src/base/nav/nav.stories.tsx b/packages/ui/src/base/nav/nav.stories.tsx index d24a7b3..9ae8226 100644 --- a/packages/ui/src/base/nav/nav.stories.tsx +++ b/packages/ui/src/base/nav/nav.stories.tsx @@ -565,6 +565,42 @@ export const ProviderRemoteControl: Story = { }, }; +export const SubNavChevronAlignment: Story = { + render: () => ( + + + + Manage with icon + + + Child with icon + + + + + Manage without icon + + + Child without icon + + + + + + ), + play: async ({ canvas }) => { + const withIcon = canvas.getByRole("button", { name: "Manage with icon" }); + const withoutIcon = canvas.getByRole("button", { name: "Manage without icon" }); + const withIconChevron = within(withIcon).getByTestId("nav-item-chevron"); + const withoutIconChevron = within(withoutIcon).getByTestId("nav-item-chevron"); + + await waitFor(() => { + expect(Math.round(withoutIconChevron.getBoundingClientRect().right)) + .toBe(Math.round(withIconChevron.getBoundingClientRect().right)); + }); + }, +}; + export const InternalToggle: Story = { render: () => ( diff --git a/packages/ui/src/base/nav/nav.test.tsx b/packages/ui/src/base/nav/nav.test.tsx index 444dc3b..ea7d1ec 100644 --- a/packages/ui/src/base/nav/nav.test.tsx +++ b/packages/ui/src/base/nav/nav.test.tsx @@ -353,6 +353,7 @@ describe("GlSubNav", () => { expect(markup).toContain("aria-expanded=\"false\""); expect(markup).toContain("data-testid=\"nav-item-chevron\""); + expect(markup).toContain("gl-nav-item-chevron-slot"); expect(markup).toContain("aria-hidden=\"true\""); expect(markup).not.toContain("defaultOpen"); }); diff --git a/packages/ui/src/base/nav/nav.tsx b/packages/ui/src/base/nav/nav.tsx index 61630f3..df07aa0 100644 --- a/packages/ui/src/base/nav/nav.tsx +++ b/packages/ui/src/base/nav/nav.tsx @@ -245,7 +245,7 @@ function simpleTextLabel(nodes: ReactNode[]) { function NavItemChevron() { return (