@@ -412,7 +412,14 @@ export default class IgcSplitterComponent extends EventEmitterMixin<
412412 }
413413
414414 private _resizing ( delta : number ) {
415- const [ paneSize , siblingSize ] = this . _calcNewSizes ( delta ) ;
415+ let [ paneSize , siblingSize ] = this . _calcNewSizes ( delta ) ;
416+ const totalSize = this . getTotalSize ( ) ;
417+ [ paneSize , siblingSize ] = this . _fitInSplitter (
418+ totalSize ,
419+ paneSize ,
420+ siblingSize ,
421+ delta
422+ ) ;
416423
417424 this . startSize = `${ paneSize } px` ;
418425 this . endSize = `${ siblingSize } px` ;
@@ -424,11 +431,18 @@ export default class IgcSplitterComponent extends EventEmitterMixin<
424431
425432 private _resizeEnd ( delta : number ) {
426433 if ( ! this . _resizeState ) return ;
434+ let [ paneSize , siblingSize ] = this . _calcNewSizes ( delta ) ;
435+ const totalSize = this . getTotalSize ( ) ;
436+
437+ [ paneSize , siblingSize ] = this . _fitInSplitter (
438+ totalSize ,
439+ paneSize ,
440+ siblingSize ,
441+ delta
442+ ) ;
427443
428- const [ paneSize , siblingSize ] = this . _calcNewSizes ( delta ) ;
429444 if ( this . _resizeState . startPane . isPercentageBased ) {
430445 // handle % resizes
431- const totalSize = this . getTotalSize ( ) ;
432446 const percentPaneSize = ( paneSize / totalSize ) * 100 ;
433447 this . startSize = `${ percentPaneSize } %` ;
434448 } else {
@@ -438,7 +452,6 @@ export default class IgcSplitterComponent extends EventEmitterMixin<
438452
439453 if ( this . _resizeState . endPane . isPercentageBased ) {
440454 // handle % resizes
441- const totalSize = this . getTotalSize ( ) ;
442455 const percentSiblingSize = ( siblingSize / totalSize ) * 100 ;
443456 this . endSize = `${ percentSiblingSize } %` ;
444457 } else {
@@ -459,6 +472,22 @@ export default class IgcSplitterComponent extends EventEmitterMixin<
459472 return [ startPaneRect [ relevantDimension ] , endPaneRect [ relevantDimension ] ] ;
460473 }
461474
475+ private _fitInSplitter (
476+ total : number ,
477+ startSize : number ,
478+ endSize : number ,
479+ delta : number
480+ ) : [ number , number ] {
481+ let newStartSize = startSize ;
482+ let newEndSize = endSize ;
483+ if ( startSize + endSize > total && delta > 0 ) {
484+ newEndSize = total - newStartSize ;
485+ } else if ( newStartSize + newEndSize > total && delta < 0 ) {
486+ newStartSize = total - newEndSize ;
487+ }
488+ return [ newStartSize , newEndSize ] ;
489+ }
490+
462491 // TODO: handle RTL
463492 private _calcNewSizes ( delta : number ) : [ number , number ] {
464493 if ( ! this . _resizeState ) return [ 0 , 0 ] ;
0 commit comments