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" > -
+
@@ -40,7 +44,7 @@