@@ -2183,7 +2183,62 @@ export default function Page() {
21832183 < ConstrainDragYAxis />
21842184 < Tabs value = { activeTab ( ) } onChange = { openTab } >
21852185 < div class = "sticky top-0 shrink-0 flex" >
2186- < Tabs . List >
2186+ < Tabs . List
2187+ ref = { ( el ) => {
2188+ let scrollTimeout : number | undefined
2189+ let prevScrollWidth = el . scrollWidth
2190+ let prevContextOpen = contextOpen ( )
2191+
2192+ const handler = ( ) => {
2193+ if ( scrollTimeout !== undefined ) clearTimeout ( scrollTimeout )
2194+ scrollTimeout = window . setTimeout ( ( ) => {
2195+ const scrollWidth = el . scrollWidth
2196+ const clientWidth = el . clientWidth
2197+ const currentContextOpen = contextOpen ( )
2198+
2199+ // Only scroll when a tab is added (width increased), not on removal
2200+ if ( scrollWidth > prevScrollWidth ) {
2201+ if ( ! prevContextOpen && currentContextOpen ) {
2202+ // Context tab was opened, scroll to first
2203+ el . scrollTo ( {
2204+ left : 0 ,
2205+ behavior : "smooth" ,
2206+ } )
2207+ } else if ( scrollWidth > clientWidth ) {
2208+ // File tab was added, scroll to rightmost
2209+ el . scrollTo ( {
2210+ left : scrollWidth - clientWidth ,
2211+ behavior : "smooth" ,
2212+ } )
2213+ }
2214+ }
2215+ // When width decreases (tab removed), don't scroll - let browser handle it naturally
2216+
2217+ prevScrollWidth = scrollWidth
2218+ prevContextOpen = currentContextOpen
2219+ } , 0 )
2220+ }
2221+
2222+ const wheelHandler = ( e : WheelEvent ) => {
2223+ // Enable horizontal scrolling with mouse wheel
2224+ if ( Math . abs ( e . deltaY ) > Math . abs ( e . deltaX ) ) {
2225+ el . scrollLeft += e . deltaY > 0 ? 50 : - 50
2226+ e . preventDefault ( )
2227+ }
2228+ }
2229+
2230+ el . addEventListener ( "wheel" , wheelHandler , { passive : false } )
2231+
2232+ const observer = new MutationObserver ( handler )
2233+ observer . observe ( el , { childList : true } )
2234+
2235+ onCleanup ( ( ) => {
2236+ el . removeEventListener ( "wheel" , wheelHandler )
2237+ observer . disconnect ( )
2238+ if ( scrollTimeout !== undefined ) clearTimeout ( scrollTimeout )
2239+ } )
2240+ } }
2241+ >
21872242 < Show when = { contextOpen ( ) } >
21882243 < Tabs . Trigger
21892244 value = "context"
0 commit comments