@@ -3029,7 +3029,7 @@ describe('DomPainter', () => {
30293029 expect ( appliedWordSpacing ) . toBeCloseTo ( expectedWordSpacing , 5 ) ;
30303030 } ) ;
30313031
3032- it ( 'reuses fragment DOM nodes when layout geometry changes' , ( ) => {
3032+ it ( 'rebuilds fragment DOM nodes when layout geometry changes to keep line epochs in sync ' , ( ) => {
30333033 const painter = createTestPainter ( { blocks : [ block ] , measures : [ measure ] } ) ;
30343034 painter . paint ( layout , mount ) ;
30353035
@@ -3051,9 +3051,12 @@ describe('DomPainter', () => {
30513051
30523052 painter . paint ( movedLayout , mount ) ;
30533053 const fragmentAfter = mount . querySelector ( '.superdoc-fragment' ) as HTMLElement ;
3054+ const lineAfter = fragmentAfter . querySelector ( '.superdoc-line' ) as HTMLElement ;
30543055
3055- expect ( fragmentAfter ) . toBe ( fragmentBefore ) ;
3056+ expect ( fragmentAfter ) . not . toBe ( fragmentBefore ) ;
30563057 expect ( fragmentAfter . style . left ) . toBe ( '60px' ) ;
3058+ expect ( fragmentAfter . dataset . layoutEpoch ) . toBeTruthy ( ) ;
3059+ expect ( lineAfter . dataset . layoutEpoch ) . toBe ( fragmentAfter . dataset . layoutEpoch ) ;
30573060 } ) ;
30583061
30593062 it ( 'rebuilds fragment DOM when block content changes via setData' , ( ) => {
@@ -5016,10 +5019,13 @@ describe('DomPainter', () => {
50165019 painter . paint ( updatedLayout , mount ) ;
50175020
50185021 const updatedWrapper = mount . querySelector ( '.superdoc-fragment-list-item' ) as HTMLElement ;
5019- expect ( updatedWrapper ) . toBe ( initialWrapper ) ;
5022+ const updatedLine = updatedWrapper . querySelector ( '.superdoc-line' ) as HTMLElement ;
5023+ expect ( updatedWrapper ) . not . toBe ( initialWrapper ) ;
50205024 expect ( updatedWrapper . style . left ) . toBe ( '90px' ) ;
50215025 expect ( updatedWrapper . style . top ) . toBe ( '55px' ) ;
50225026 expect ( updatedWrapper . style . width ) . toBe ( '310px' ) ;
5027+ expect ( updatedWrapper . dataset . layoutEpoch ) . toBeTruthy ( ) ;
5028+ expect ( updatedLine . dataset . layoutEpoch ) . toBe ( updatedWrapper . dataset . layoutEpoch ) ;
50235029 } ) ;
50245030
50255031 it ( 'applies resolved zIndex only to anchored media fragments' , ( ) => {
0 commit comments