@@ -7,6 +7,7 @@ import Label from "../../src/Label.js";
77import List from "../../src/List.js" ;
88import ListItem from "../../src/ListItemStandard.js" ;
99import Input from "../../src/Input.js" ;
10+ import Dialog from "../../src/Dialog.js" ;
1011
1112describe ( "Rendering" , ( ) => {
1213 it ( "tests arrow positioning" , ( ) => {
@@ -1810,3 +1811,88 @@ describe("Responsive paddings", () => {
18101811 cy . get ( "[ui5-popover]" ) . should ( "have.attr" , "media-range" , "M" ) ;
18111812 } ) ;
18121813} ) ;
1814+
1815+ describe ( "Opener visibility in scrollable containers" , ( ) => {
1816+ it ( "should close popover when opener scrolls out of view in scrollable container" , ( ) => {
1817+ cy . mount (
1818+ < div id = "scrollContainer" style = { { height : "200px" , overflowY : "auto" } } >
1819+ < div style = { { height : "500px" } } >
1820+ < Button id = "opener" style = { { marginTop : "100px" } } > Open</ Button >
1821+ < Popover opener = "opener" open = { true } >
1822+ < div > Popover Content</ div >
1823+ </ Popover >
1824+ </ div >
1825+ </ div >
1826+ ) ;
1827+
1828+ cy . get < Popover > ( "[ui5-popover]" ) . ui5PopoverOpened ( ) ;
1829+
1830+ cy . get ( "#scrollContainer" ) . scrollTo ( 0 , 200 ) ;
1831+
1832+ cy . get ( "[ui5-popover]" ) . should ( "have.prop" , "open" , false ) ;
1833+ } ) ;
1834+
1835+ it ( "should close popover when opener scrolls out in Dialog scenario" , ( ) => {
1836+ cy . mount (
1837+ < Dialog open = { true } >
1838+ < div slot = "header" style = { { height : "200px" } } > LargeHeader</ div >
1839+ < div id = "dialogScrollContainer" style = { { height : "200px" , overflowY : "auto" } } >
1840+ < div style = { { height : "1000px" } } >
1841+ < Button id = "dialogOpener" style = { { marginTop : "100px" } } > Opener</ Button >
1842+ < Popover opener = "dialogOpener" open = { true } >
1843+ < div > Popover in Dialog</ div >
1844+ </ Popover >
1845+ </ div >
1846+ </ div >
1847+ </ Dialog >
1848+ ) ;
1849+
1850+ cy . get < Popover > ( "[ui5-popover]" ) . ui5PopoverOpened ( ) ;
1851+
1852+ cy . get ( "#dialogScrollContainer" ) . scrollTo ( 0 , 500 ) ;
1853+
1854+ cy . get ( "[ui5-popover]" ) . should ( "have.prop" , "open" , false ) ;
1855+ } ) ;
1856+
1857+ it ( "should work with nested scrollable containers" , ( ) => {
1858+ cy . mount (
1859+ < div style = { { height : "300px" , overflowY : "auto" } } >
1860+ < div style = { { height : "500px" } } >
1861+ < div id = "innerScroll" style = { { height : "150px" , overflowY : "auto" , marginTop : "50px" } } >
1862+ < div style = { { height : "800px" } } >
1863+ < Button id = "nestedOpener" style = { { marginTop : "80px" } } > Nested Opener</ Button >
1864+ < Popover opener = "nestedOpener" open = { true } >
1865+ < div > Nested Popover</ div >
1866+ </ Popover >
1867+ </ div >
1868+ </ div >
1869+ </ div >
1870+ </ div >
1871+ ) ;
1872+
1873+ cy . get < Popover > ( "[ui5-popover]" ) . ui5PopoverOpened ( ) ;
1874+
1875+ cy . get ( "#innerScroll" ) . scrollTo ( 0 , 300 ) ;
1876+
1877+ cy . get ( "[ui5-popover]" ) . should ( "have.prop" , "open" , false ) ;
1878+ } ) ;
1879+
1880+ it ( "should handle horizontal scrolling" , ( ) => {
1881+ cy . mount (
1882+ < div id = "horizontalScroll" style = { { width : "200px" , height : "200px" , overflowX : "auto" } } >
1883+ < div style = { { width : "1000px" , height : "100px" } } >
1884+ < Button id = "hOpener" style = { { marginLeft : "100px" } } > Horizontal Opener</ Button >
1885+ < Popover opener = "hOpener" open = { true } >
1886+ < div > Horizontal Popover</ div >
1887+ </ Popover >
1888+ </ div >
1889+ </ div >
1890+ ) ;
1891+
1892+ cy . get < Popover > ( "[ui5-popover]" ) . ui5PopoverOpened ( ) ;
1893+
1894+ cy . get ( "#horizontalScroll" ) . scrollTo ( 500 , 0 ) ;
1895+
1896+ cy . get ( "[ui5-popover]" ) . should ( "have.prop" , "open" , false ) ;
1897+ } ) ;
1898+ } ) ;
0 commit comments