@@ -2225,8 +2225,8 @@ export class DomPainter {
22252225 } ;
22262226
22272227 const resolvedItems = resolvedPage ?. items ?? [ ] ;
2228- const sdtBoundaries = computeSdtBoundaries ( page . fragments , resolvedItems , this . sdtLabelsRendered ) ;
2229- const betweenBorderFlags = computeBetweenBorderFlags ( page . fragments , resolvedItems ) ;
2228+ const sdtBoundaries = computeSdtBoundaries ( resolvedItems , this . sdtLabelsRendered ) ;
2229+ const betweenBorderFlags = computeBetweenBorderFlags ( resolvedItems ) ;
22302230
22312231 resolvedItems . forEach ( ( resolvedItem , index ) => {
22322232 if ( resolvedItem . kind !== 'fragment' ) return ;
@@ -2581,7 +2581,7 @@ export class DomPainter {
25812581
25822582 // Compute between-border flags for header/footer paragraph fragments
25832583 const decorationItems = data . items ?? [ ] ;
2584- const betweenBorderFlags = computeBetweenBorderFlags ( data . fragments , decorationItems ) ;
2584+ const betweenBorderFlags = computeBetweenBorderFlags ( decorationItems ) ;
25852585
25862586 // Separate behindDoc fragments from normal fragments.
25872587 // Prefer explicit fragment.behindDoc when present. Keep zIndex===0 as a
@@ -2774,8 +2774,8 @@ export class DomPainter {
27742774 const existing = new Map ( state . fragments . map ( ( frag ) => [ frag . key , frag ] ) ) ;
27752775 const nextFragments : FragmentDomState [ ] = [ ] ;
27762776 const resolvedItems = resolvedPage ?. items ?? [ ] ;
2777- const sdtBoundaries = computeSdtBoundaries ( page . fragments , resolvedItems , this . sdtLabelsRendered ) ;
2778- const betweenBorderFlags = computeBetweenBorderFlags ( page . fragments , resolvedItems ) ;
2777+ const sdtBoundaries = computeSdtBoundaries ( resolvedItems , this . sdtLabelsRendered ) ;
2778+ const betweenBorderFlags = computeBetweenBorderFlags ( resolvedItems ) ;
27792779
27802780 const contextBase : FragmentRenderContext = {
27812781 pageNumber : page . number ,
@@ -2944,8 +2944,8 @@ export class DomPainter {
29442944 } ;
29452945
29462946 const resolvedItems = resolvedPage ?. items ?? [ ] ;
2947- const sdtBoundaries = computeSdtBoundaries ( page . fragments , resolvedItems , this . sdtLabelsRendered ) ;
2948- const betweenBorderFlags = computeBetweenBorderFlags ( page . fragments , resolvedItems ) ;
2947+ const sdtBoundaries = computeSdtBoundaries ( resolvedItems , this . sdtLabelsRendered ) ;
2948+ const betweenBorderFlags = computeBetweenBorderFlags ( resolvedItems ) ;
29492949 const fragmentStates : FragmentDomState [ ] = resolvedItems . flatMap ( ( resolvedItem , index ) => {
29502950 if ( resolvedItem . kind !== 'fragment' ) return [ ] ;
29512951 const fragment = resolvedItem . fragment ;
@@ -7255,52 +7255,61 @@ export class DomPainter {
72557255}
72567256
72577257const computeSdtBoundaries = (
7258- fragments : readonly Fragment [ ] ,
72597258 resolvedItems : readonly ResolvedPaintItem [ ] ,
72607259 sdtLabelsRendered : Set < string > ,
72617260) : Map < number , SdtBoundaryOptions > => {
72627261 const boundaries = new Map < number , SdtBoundaryOptions > ( ) ;
7263- const containerKeys : ( string | null ) [ ] = fragments . map ( ( _frag , idx ) => {
7264- const item = resolvedItems [ idx ] ;
7262+ const containerKeys : ( string | null ) [ ] = resolvedItems . map ( ( item ) => {
72657263 if ( item && 'sdtContainerKey' in item ) {
72667264 const key = ( item as { sdtContainerKey ?: string | null } ) . sdtContainerKey ;
72677265 return key ?? null ;
72687266 }
72697267 return null ;
72707268 } ) ;
72717269
7270+ const fragmentOf = ( idx : number ) : Fragment | null => {
7271+ const item = resolvedItems [ idx ] ;
7272+ return item && item . kind === 'fragment' ? item . fragment : null ;
7273+ } ;
7274+
72727275 let i = 0 ;
7273- while ( i < fragments . length ) {
7276+ while ( i < resolvedItems . length ) {
72747277 const currentKey = containerKeys [ i ] ;
7275- if ( ! currentKey ) {
7278+ const startFrag = fragmentOf ( i ) ;
7279+ if ( ! currentKey || ! startFrag ) {
72767280 i += 1 ;
72777281 continue ;
72787282 }
72797283
7280- let groupRight = fragments [ i ] . x + fragments [ i ] . width ;
7284+ let groupRight = startFrag . x + startFrag . width ;
72817285 let j = i ;
72827286
7283- while ( j + 1 < fragments . length && containerKeys [ j + 1 ] === currentKey ) {
7287+ while ( j + 1 < resolvedItems . length && containerKeys [ j + 1 ] === currentKey ) {
72847288 j += 1 ;
7285- const fragmentRight = fragments [ j ] . x + fragments [ j ] . width ;
7289+ const nextFrag = fragmentOf ( j ) ;
7290+ if ( ! nextFrag ) break ;
7291+ const fragmentRight = nextFrag . x + nextFrag . width ;
72867292 if ( fragmentRight > groupRight ) {
72877293 groupRight = fragmentRight ;
72887294 }
72897295 }
72907296
72917297 for ( let k = i ; k <= j ; k += 1 ) {
7292- const fragment = fragments [ k ] ;
7298+ const fragment = fragmentOf ( k ) ;
7299+ if ( ! fragment ) continue ;
72937300 const isStart = k === i ;
72947301 const isEnd = k === j ;
72957302
72967303 let paddingBottomOverride : number | undefined ;
72977304 if ( ! isEnd ) {
7298- const nextFragment = fragments [ k + 1 ] ;
7305+ const nextFragment = fragmentOf ( k + 1 ) ;
72997306 const currentHeight = ( resolvedItems [ k ] as { height ?: number } | undefined ) ?. height ?? 0 ;
73007307 const currentBottom = fragment . y + currentHeight ;
7301- const gapToNext = nextFragment . y - currentBottom ;
7302- if ( gapToNext > 0 ) {
7303- paddingBottomOverride = gapToNext ;
7308+ if ( nextFragment ) {
7309+ const gapToNext = nextFragment . y - currentBottom ;
7310+ if ( gapToNext > 0 ) {
7311+ paddingBottomOverride = gapToNext ;
7312+ }
73047313 }
73057314 }
73067315
0 commit comments