From 78d90158c60de0151140220899478004f11cdc74 Mon Sep 17 00:00:00 2001 From: Julien Vannier Date: Fri, 23 Oct 2026 10:30:21 +0200 Subject: [PATCH 1/3] Add a border to the collapsed sidebar group menu --- app/styles/organisms/sidebar.less | 1 + 1 file changed, 1 insertion(+) diff --git a/app/styles/organisms/sidebar.less b/app/styles/organisms/sidebar.less index d7fa33d14..d048d1e3f 100644 --- a/app/styles/organisms/sidebar.less +++ b/app/styles/organisms/sidebar.less @@ -316,6 +316,7 @@ a.oss-sidebar-item { &:not(&--expanded) &__items-container--visible { .box-shadow-md; + border: 1px solid var(--color-border-default); position: absolute; top: 0; left: calc(var(--sidebar-width) - var(--spacing-px-3)); From bac8659ba72622c7c0dc3dae3bbc43867f1c8001 Mon Sep 17 00:00:00 2001 From: Julien Vannier Date: Fri, 23 Oct 2026 11:00:36 +0200 Subject: [PATCH 2/3] Clip button dropdown items to the menu rounded corners --- app/styles/molecules/button-dropdown.less | 1 + 1 file changed, 1 insertion(+) diff --git a/app/styles/molecules/button-dropdown.less b/app/styles/molecules/button-dropdown.less index c5ddaf24e..fab75638b 100644 --- a/app/styles/molecules/button-dropdown.less +++ b/app/styles/molecules/button-dropdown.less @@ -127,6 +127,7 @@ min-width: 180px; border: 1px solid var(--color-border-default); border-radius: var(--border-radius-sm); + overflow: hidden; z-index: 99; &--visible { From 3ddd8163dbcae33b0be2eb7952c5e9452f374486 Mon Sep 17 00:00:00 2001 From: Julien Vannier Date: Fri, 23 Oct 2026 11:25:01 +0200 Subject: [PATCH 3/3] Detect clicks inside the side panel from its own element --- addon/components/o-s-s/side-panel.ts | 4 +- .../components/o-s-s/side-panel-test.ts | 37 ++++++++++++++++++- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/addon/components/o-s-s/side-panel.ts b/addon/components/o-s-s/side-panel.ts index 8f2143d06..d2e0c1b37 100644 --- a/addon/components/o-s-s/side-panel.ts +++ b/addon/components/o-s-s/side-panel.ts @@ -46,8 +46,8 @@ export default class OssSidePanel extends Component { } @action - onClickOutside(_: any, event: Event): void { - const sidePanelElement = document.querySelector('.oss-side-panel'); + onClickOutside(backdrop: HTMLElement, event: Event): void { + const sidePanelElement = backdrop.closest('.oss-side-panel'); if (sidePanelElement?.contains(event.target as Node)) return; if (event.target === this.initialTarget) { diff --git a/tests/integration/components/o-s-s/side-panel-test.ts b/tests/integration/components/o-s-s/side-panel-test.ts index d0c98dd36..2a87606af 100644 --- a/tests/integration/components/o-s-s/side-panel-test.ts +++ b/tests/integration/components/o-s-s/side-panel-test.ts @@ -1,7 +1,7 @@ import { hbs } from 'ember-cli-htmlbars'; import { module, test } from 'qunit'; import { setupRenderingTest } from 'ember-qunit'; -import { click, render } from '@ember/test-helpers'; +import { click, render, type TestContext } from '@ember/test-helpers'; import sinon from 'sinon'; module('Integration | Component | o-s-s/side-panel', function (hooks) { @@ -168,4 +168,39 @@ module('Integration | Component | o-s-s/side-panel', function (hooks) { assert.ok(this.onClose.calledOnce, 'Clicked on the transparent backdrop so the side panel closes.'); }); }); + + module('When two side panels are mounted', (hooks) => { + hooks.beforeEach(function (this: TestContext) { + this.onCloseFirst = sinon.stub(); + this.onCloseSecond = sinon.stub(); + }); + + async function renderSidePanels() { + await render( + hbs` +
+ + + <:main> +
+ +
` + ); + } + + test('Clicking inside the second side panel does not close it', async function (this: TestContext, assert) { + await renderSidePanels(); + await click('[data-control-name="second-side-panel-content"]'); + + assert.true(this.onCloseSecond.notCalled); + }); + + test('Clicking outside both side panels closes them', async function (this: TestContext, assert) { + await renderSidePanels(); + await click('[data-control-name="outside-side-panels"]'); + + assert.true(this.onCloseFirst.calledOnceWithExactly()); + assert.true(this.onCloseSecond.calledOnceWithExactly()); + }); + }); });