@@ -141,8 +141,8 @@ describe('ReferenceRowPreview', () => {
141141 const subtable = container . querySelector ( '[role="table"]' )
142142 expect ( subtable ?. className ) . toContain ( 'w-full' )
143143 expect ( subtable ?. className ) . toContain ( 'h-full' )
144- expect ( subtable ?. className ) . toContain ( 'cursor-default' )
145- expect ( subtable ?. className ) . toContain ( 'select-none' )
144+ expect ( subtable ?. className ) . not . toContain ( 'cursor-default' )
145+ expect ( subtable ?. className ) . not . toContain ( 'select-none' )
146146 expect ( subtable ?. className ) . toContain ( 'grid-rows-2' )
147147 expect ( subtable ?. querySelectorAll ( '[role="row"]' ) ) . toHaveLength ( 2 )
148148 expect ( subtable ?. querySelectorAll ( '[role="columnheader"]' ) ) . toHaveLength ( 2 )
@@ -163,6 +163,41 @@ describe('ReferenceRowPreview', () => {
163163 expect ( container . innerHTML ) . not . toContain ( 'rounded-md' )
164164 } )
165165
166+ it ( 'scrolls horizontally when wheel input starts on cell text' , ( ) => {
167+ renderPreview ( )
168+
169+ const subtableViewport = container . querySelector < HTMLElement > ( '.overscroll-x-contain' )
170+ const cellText = Array . from ( container . querySelectorAll ( '[role="cell"] span' ) ) . find (
171+ ( element ) => element . textContent === 'Acme'
172+ )
173+ if ( ! subtableViewport || ! cellText ) throw new Error ( 'Expected the referenced row preview' )
174+
175+ const wheelEvent = new WheelEvent ( 'wheel' , {
176+ bubbles : true ,
177+ cancelable : true ,
178+ deltaX : 80 ,
179+ } )
180+ act ( ( ) => {
181+ cellText . dispatchEvent ( wheelEvent )
182+ } )
183+
184+ expect ( subtableViewport . scrollLeft ) . toBe ( 80 )
185+ expect ( wheelEvent . defaultPrevented ) . toBe ( true )
186+
187+ const verticalWheelEvent = new WheelEvent ( 'wheel' , {
188+ bubbles : true ,
189+ cancelable : true ,
190+ deltaX : 10 ,
191+ deltaY : 80 ,
192+ } )
193+ act ( ( ) => {
194+ cellText . dispatchEvent ( verticalWheelEvent )
195+ } )
196+
197+ expect ( subtableViewport . scrollLeft ) . toBe ( 80 )
198+ expect ( verticalWheelEvent . defaultPrevented ) . toBe ( false )
199+ } )
200+
166201 it ( 'sizes the inner scroller to the visible portion of the preview cell' , ( ) => {
167202 let previewCellRight = 1_500
168203 vi . spyOn ( HTMLElement . prototype , 'getBoundingClientRect' ) . mockImplementation ( function ( ) {
@@ -248,12 +283,18 @@ describe('ReferenceRowPreview', () => {
248283 const previewShell = container . querySelector < HTMLElement > ( 'tbody > tr > td > div > div' )
249284 const scrollRoot = container . querySelector < HTMLElement > ( '[data-table-scroll]' )
250285 const previewCell = container . querySelector < HTMLElement > ( 'tbody > tr > td' )
286+ const previewViewport = container . querySelector < HTMLElement > ( '.overscroll-x-contain' )
251287 if ( ! scrollRoot ) throw new Error ( 'Expected the table scroll root to be rendered' )
252288 if ( ! previewCell ) throw new Error ( 'Expected the preview cell to be rendered' )
289+ if ( ! previewViewport ) throw new Error ( 'Expected the preview viewport to be rendered' )
253290 const scrollListener = registeredListeners . find (
254291 ( { target, type } ) => target === scrollRoot && type === 'scroll'
255292 ) ?. listener
293+ const wheelListener = registeredListeners . find (
294+ ( { target, type } ) => target === previewViewport && type === 'wheel'
295+ ) ?. listener
256296 if ( ! scrollListener ) throw new Error ( 'Expected the scroll listener to be registered' )
297+ if ( ! wheelListener ) throw new Error ( 'Expected the wheel listener to be registered' )
257298 expect ( observe ) . toHaveBeenCalledTimes ( 2 )
258299 expect ( observe . mock . calls . some ( ( [ target ] ) => target === scrollRoot ) ) . toBe ( true )
259300 expect ( observe . mock . calls . some ( ( [ target ] ) => target === previewCell ) ) . toBe ( true )
@@ -274,6 +315,11 @@ describe('ReferenceRowPreview', () => {
274315 type : 'scroll' ,
275316 listener : scrollListener ,
276317 } )
318+ expect ( removedListeners ) . toContainEqual ( {
319+ target : previewViewport ,
320+ type : 'wheel' ,
321+ listener : wheelListener ,
322+ } )
277323 } )
278324
279325 it ( 'shows no match when the stored row ID does not resolve' , ( ) => {
0 commit comments