11import { expect } from '@vaadin/chai-plugins' ;
2- import { aTimeout , fixtureSync , nextFrame , nextRender , oneEvent } from '@vaadin/testing-helpers' ;
2+ import { aTimeout , fixtureSync , nextFrame , nextRender , nextResize , oneEvent } from '@vaadin/testing-helpers' ;
33import sinon from 'sinon' ;
44import './chart-not-animated-styles.js' ;
55import '../src/vaadin-chart.js' ;
@@ -344,6 +344,47 @@ describe('vaadin-chart', () => {
344344 expect ( rect . width ) . to . be . equal ( 300 ) ;
345345 expect ( chart . configuration . chartWidth ) . to . be . equal ( 300 ) ;
346346 } ) ;
347+
348+ it ( 'should use intrinsic width when container provides no width' , async ( ) => {
349+ chart = fixtureSync ( `
350+ <div style="display: inline-flex; height: 300px">
351+ <vaadin-chart></vaadin-chart>
352+ </div>` ) . querySelector ( 'vaadin-chart' ) ;
353+
354+ await nextResize ( chart ) ;
355+
356+ expect ( chart . offsetHeight ) . to . be . equal ( 300 ) ;
357+ expect ( chart . offsetWidth ) . to . be . greaterThan ( 0 ) ;
358+ expect ( chart . configuration . chartHeight ) . to . be . equal ( chart . offsetHeight ) ;
359+ } ) ;
360+
361+ it ( 'should resize from intrinsic width to explicit width' , async ( ) => {
362+ chart = fixtureSync ( `
363+ <div style="display: inline-flex; height: 300px">
364+ <vaadin-chart></vaadin-chart>
365+ </div>` ) . querySelector ( 'vaadin-chart' ) ;
366+
367+ await nextResize ( chart ) ;
368+
369+ chart . style . width = '100px' ;
370+ await nextResize ( chart ) ;
371+
372+ expect ( chart . offsetHeight ) . to . be . equal ( 300 ) ;
373+ expect ( chart . offsetWidth ) . to . be . equal ( 100 ) ;
374+ expect ( chart . configuration . chartWidth ) . to . be . equal ( chart . offsetWidth ) ;
375+ } ) ;
376+
377+ it ( 'should collapse to zero width when container width is zero' , async ( ) => {
378+ chart = fixtureSync ( `
379+ <div style="display: inline-flex; height: 300px; width: 0px">
380+ <vaadin-chart></vaadin-chart>
381+ </div>` ) . querySelector ( 'vaadin-chart' ) ;
382+
383+ await nextResize ( chart ) ;
384+
385+ expect ( chart . offsetHeight ) . to . be . equal ( 300 ) ;
386+ expect ( chart . offsetWidth ) . to . be . equal ( 0 ) ;
387+ } ) ;
347388 } ) ;
348389
349390 describe ( 'height' , ( ) => {
@@ -367,6 +408,66 @@ describe('vaadin-chart', () => {
367408 expect ( rect . height ) . to . be . equal ( 300 ) ;
368409 expect ( chart . configuration . chartHeight ) . to . be . equal ( 300 ) ;
369410 } ) ;
411+
412+ it ( 'should not cause container height expansion in flex layout' , async ( ) => {
413+ const chartMinHeight = 300 ;
414+ const siblingHeight = 5 ;
415+
416+ // See https://github.com/vaadin/web-components/issues/10316
417+ chart = fixtureSync ( `
418+ <div style="display: flex">
419+ <div>
420+ <vaadin-chart style="height: 100%; min-height: ${ chartMinHeight } px;"></vaadin-chart>
421+ <div style="height: ${ siblingHeight } px"></div>
422+ </div>
423+ </div>` ) . querySelector ( 'vaadin-chart' ) ;
424+
425+ await nextResize ( chart ) ;
426+
427+ expect ( chart . offsetHeight ) . to . be . equal ( chartMinHeight + siblingHeight ) ;
428+ expect ( chart . configuration . chartHeight ) . to . be . equal ( chart . offsetHeight ) ;
429+ } ) ;
430+
431+ it ( 'should use intrinsic height when container provides no height' , async ( ) => {
432+ chart = fixtureSync ( `
433+ <div style="display: flex; width: 300px">
434+ <vaadin-chart></vaadin-chart>
435+ </div>` ) . querySelector ( 'vaadin-chart' ) ;
436+
437+ await nextResize ( chart ) ;
438+
439+ expect ( chart . offsetWidth ) . to . be . equal ( 300 ) ;
440+ expect ( chart . offsetHeight ) . to . be . greaterThan ( 0 ) ;
441+ expect ( chart . configuration . chartHeight ) . to . be . equal ( chart . offsetHeight ) ;
442+ } ) ;
443+
444+ it ( 'should resize from intrinsic height to explicit height' , async ( ) => {
445+ chart = fixtureSync ( `
446+ <div style="display: flex; width: 300px">
447+ <vaadin-chart></vaadin-chart>
448+ </div>` ) . querySelector ( 'vaadin-chart' ) ;
449+
450+ await nextResize ( chart ) ;
451+
452+ chart . style . height = '100px' ;
453+ await nextResize ( chart ) ;
454+
455+ expect ( chart . offsetWidth ) . to . be . equal ( 300 ) ;
456+ expect ( chart . offsetHeight ) . to . be . equal ( 100 ) ;
457+ expect ( chart . configuration . chartHeight ) . to . be . equal ( chart . offsetHeight ) ;
458+ } ) ;
459+
460+ it ( 'should collapse to zero height when container height is zero' , async ( ) => {
461+ chart = fixtureSync ( `
462+ <div style="display: flex; width: 300px; height: 0px">
463+ <vaadin-chart></vaadin-chart>
464+ </div>` ) . querySelector ( 'vaadin-chart' ) ;
465+
466+ await nextResize ( chart ) ;
467+
468+ expect ( chart . offsetWidth ) . to . be . equal ( 300 ) ;
469+ expect ( chart . offsetHeight ) . to . be . equal ( 0 ) ;
470+ } ) ;
370471 } ) ;
371472
372473 describe ( 'resize' , ( ) => {
0 commit comments