diff --git a/app/components/malio/accordion/Accordion.test.ts b/app/components/malio/accordion/Accordion.test.ts
index 92f30c8..376c88a 100644
--- a/app/components/malio/accordion/Accordion.test.ts
+++ b/app/components/malio/accordion/Accordion.test.ts
@@ -222,3 +222,35 @@ describe('MalioAccordion — defaultOpen, disabled & clavier', () => {
root.remove()
})
})
+
+describe('MalioAccordion — overflow du panneau (popovers enfants)', () => {
+ const ONE = `contenu
`
+ const ONE_OPEN = `contenu
`
+
+ it('clips the panel (overflow-hidden) while collapsed', () => {
+ const wrapper = mountAccordion({}, ONE)
+ const inner = wrapper.find('[role="region"] > div')
+ expect(inner.classes()).toContain('overflow-hidden')
+ expect(inner.classes()).not.toContain('overflow-visible')
+ })
+
+ it('lets the panel overflow once open at mount (defaultOpen)', async () => {
+ const wrapper = mountAccordion({}, ONE_OPEN)
+ await nextTick()
+ expect(wrapper.find('[role="region"] > div').classes()).toContain('overflow-visible')
+ })
+
+ it('switches to overflow-visible after the open transition ends', async () => {
+ const wrapper = mountAccordion({}, ONE)
+ await wrapper.find('button[aria-expanded]').trigger('click')
+ await wrapper.find('[role="region"]').trigger('transitionend', {propertyName: 'grid-template-rows'})
+ expect(wrapper.find('[role="region"] > div').classes()).toContain('overflow-visible')
+ })
+
+ it('re-clips (overflow-hidden) as soon as it closes', async () => {
+ const wrapper = mountAccordion({}, ONE_OPEN)
+ await nextTick()
+ await wrapper.find('button[aria-expanded]').trigger('click')
+ expect(wrapper.find('[role="region"] > div').classes()).toContain('overflow-hidden')
+ })
+})
diff --git a/app/components/malio/accordion/AccordionItem.vue b/app/components/malio/accordion/AccordionItem.vue
index 1df8e26..2589d3d 100644
--- a/app/components/malio/accordion/AccordionItem.vue
+++ b/app/components/malio/accordion/AccordionItem.vue
@@ -29,8 +29,12 @@
:aria-labelledby="headerId"
class="grid transition-[grid-template-rows] duration-200 ease-out"
:class="open ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'"
+ @transitionend="onPanelTransitionEnd"
>
-